Ver Mensaje Individual
  #7 (permalink)  
Antiguo 04/12/2009, 11:20
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
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)