Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda Varios Left Outer Join

Estas en el tema de Duda Varios Left Outer Join en el foro de Bases de Datos General en Foros del Web. Hola, Tengo una duda con las uniones y me gustaria plantearla por si alguién pudiese aclararmela. Si tengo la siguiente sentencia SQL anidando varios Left ...
  #1 (permalink)  
Antiguo 03/12/2009, 07:28
 
Fecha de Ingreso: febrero-2006
Mensajes: 38
Antigüedad: 18 años, 2 meses
Puntos: 0
Duda Varios Left Outer Join

Hola,

Tengo una duda con las uniones y me gustaria plantearla por si alguién pudiese aclararmela.

Si tengo la siguiente sentencia SQL anidando varios Left Outer Join:
Código:
SELECT p.Nombre, p.Edad, t.Valor1, h.Valor2 FROM
BASE1 p LEFT OUTER JOIN BASE2 t 
ON P.IDB1=t.IDB2
AND t.ValorK='C'
AND p.CLIENT=t.CLIENT
LEFT OUTER JOIN BASE2 h
ON t.CLIENT=h.CLIENT
AND h.VALORG='H'
AND h.VALOR=t.VALOR
Entiendo que lo que hace la consulta es SELECCIONAR TODOS los registros de la Base1 y mostrar el valor en la columna t.Valor1 con las coincidencias con la Base2 que cumplan IDB1=IDB2, t.ValorK=c y p.CLIENT=t.CLIENT, luego unir los registro resultado del primer LEFT OUTER con el siguiente LEFT OUTER JOIN??? mostrando las los valores en la columna h.Valor2 cuyas coincidencias t.CLIENT=h.CLIENT y h.VALORG='H' Y h.VALOR=t.VALOR, es correcto???

Muchas gracias
  #2 (permalink)  
Antiguo 04/12/2009, 04:56
 
Fecha de Ingreso: febrero-2006
Mensajes: 38
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Duda Varios Left Outer Join

Por favor nadie puede explicarme el funcionamiento de esa sentencia.

Una ayudita pleaseeeee :)

Gracias
  #3 (permalink)  
Antiguo 04/12/2009, 05:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda Varios Left Outer Join

Primero, dinos qué DBMS usas, porque la sintaxis cambia en los JOIN según cuál fuere, así como los resultados.
Además, aclarame algo, aunque parezca una tontera: cuando pones "Base1" o "Base2", ¿te estás refiriendo a tablas, no es así?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 04/12/2009, 08:51
 
Fecha de Ingreso: febrero-2006
Mensajes: 38
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Duda Varios Left Outer Join

Muchas gracias gnzsoloyo, soy muy novato con esto del sql y no sabía ni que era diferente segun la base de datos. La DBMS es Sql Server 2005 y en cuanto a Base1, Base2 etc son tablas. El problema que tengo es conceptual me lio con los Join y más cuando tengo que encadenar varios y sobre todo con las clausulas.

Lo dicho muchas gracias
  #5 (permalink)  
Antiguo 04/12/2009, 09:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda Varios Left Outer Join

Simplificando: Esta sentencia:
Código sql:
Ver original
  1. SELECT
  2.     p.Nombre,
  3.     p.Edad,
  4.     t.Valor1,
  5.     h.Valor2
  6. FROM BASE1 p
  7.     LEFT  OUTER JOIN
  8.     BASE2 t  ON P.IDB1=t.IDB2 AND t.ValorK='C' AND p.CLIENT=t.CLIENT
  9.     LEFT OUTER JOIN
  10.     BASE2 h ON t.CLIENT=h.CLIENT AND h.VALORG='H' AND h.VALOR=t.VALOR
Esto devolverá sólo los registros de la primera tabla que tengan coincidencia con los de la segunda, en tanto la segunda tenga concidencias con la tercera, ya que los nulos de la segunda no se usarán para buscar en la última.
En los hechos, esto funcionaría como un INNER JOIN entre la primera y la segunda, con un LEFT JOIN sobre la tercera...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/12/2009, 10:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 38
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Duda Varios Left Outer Join

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Esto devolverá sólo los registros de la primera tabla que tengan coincidencia con los de la segunda, en tanto la segunda tenga concidencias con la tercera, ya que los nulos de la segunda no se usarán para buscar en la última.
En los hechos, esto funcionaría como un INNER JOIN entre la primera y la segunda, con un LEFT JOIN sobre la tercera...
Muchas gracias de nuevo, que lio tengo.
El primer LEFT no traerá todos los registros de la primera tabla BASE1?
y mostrará información en la columna "t.Valor1" sólo cuando coincidan las clausulas
P.IDB1=t.IDB2 AND t.ValorK='C' AND p.CLIENT=t.CLIENT
Y el segundo LEFT no seguirá mostrando todos los registros de la primera Unión que son los de la primera tabla BASE1??

Muchas gracias
  #7 (permalink)  
Antiguo 04/12/2009, 11:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda Varios Left Outer Join

Cita:
El primer LEFT no traerá todos los registros de la primera tabla BASE1?
y mostrará información en la columna "t.Valor1" sólo cuando coincidan las clausulas
P.IDB1=t.IDB2 AND t.ValorK='C' AND p.CLIENT=t.CLIENT
El problema es que lo que tienes no son dos LEFT OUTER JOIN, sino una consulta que relaciona tres tablas por LEFT OUTER JOIN...
No es lo mismo.

Cuando el DBMS procesa la sentencia toma la primera tabla y la cruza con la segunda, dando como resultado una tabla en memoria (se denomina tabla derivada), pero el proceso no termina allí: La tabla derivada se cruza con la tercera para dar el resultado final.
El problema se da cuando tienes un registro de la primera que no tiene correspondencia con la segunda. En ese caso el campo t.CLIENT y el t.VALOR contienen NULL, por lo que no se pueden cruzar con ningún dato de la tercera tabla. Ese registro de la primera tabla se podrá relacionar nunca con la tercera.
Esto es así,porque NULL no es un dato, es la ausencia de datos. No puedes cruzar la nada con algo.
En el álgebra de SQL, cualquier operación realizada donde uno de sus valores sea NULL tendrá por resultado NULL, y por tanto no puede dar resultados en una tabla.

¿Se comprende la idea?


En síntesis: el resultado final no es el resultado de cada LEFT OUTER JOIN considerado separamente, sino de la relación de las tres tablas como unidad.

Cita:
Y el segundo LEFT no seguirá mostrando todos los registros de la primera Unión que son los de la primera tabla BASE1??
No confundas JOIN con UNION. Son operaciones diferentes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 04/12/2009, 11:49
 
Fecha de Ingreso: febrero-2006
Mensajes: 38
Antigüedad: 18 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Duda Varios Left Outer Join

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Cuando el DBMS procesa la sentencia toma la primera tabla y la cruza con la segunda, dando como resultado una tabla en memoria (se denomina tabla derivada), pero el proceso no termina allí: La tabla derivada se cruza con la tercera para dar el resultado final.
El problema se da cuando tienes un registro de la primera que no tiene correspondencia con la segunda. En ese caso el campo t.CLIENT y el t.VALOR contienen NULL, por lo que no se pueden cruzar con ningún dato de la tercera tabla. Ese registro de la primera tabla se podrá relacionar nunca con la tercera.
Esto es así,porque NULL no es un dato, es la ausencia de datos. No puedes cruzar la nada con algo.
En el álgebra de SQL, cualquier operación realizada donde uno de sus valores sea NULL tendrá por resultado NULL, y por tanto no puede dar resultados en una tabla.

¿Se comprende la idea?


En síntesis: el resultado final no es el resultado de cada LEFT OUTER JOIN considerado separamente, sino de la relación de las tres tablas como unidad.


No confundas JOIN con UNION. Son operaciones diferentes.
Dios mío que jaleo tengo en la cabeza ahora mismo.

A ver si te he comprendido al hacer esas LEFT OUTER JOIN lo que hago es buscar los resultados de la relación de las tres tablas combinadas.
Es decir aquellos registros que cumplan todas las clausulas y si alguna de ellas contiene el valor NULL ese registro no será mostrado.

Es así?? Sabes de algún buen libro que poder comprar para aprender bien SQL independientemente de que luego con la práctica es cuando aprendes pero para asentar conceptos??

Muchísimas gracias!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:13.