Ver Mensaje Individual
  #13 (permalink)  
Antiguo 05/01/2012, 16:28
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema de lógica en base de datos MySQL

El problema sucede cuando intentas ver las tres tablas como si fuesen un sólo resultado, cosa que no es así.
Cuando haces un JOIN con más de dos tablas (esto se planteo con otro forista hace unas semanas), lo que tienes que entender es que el segundo JOIN no opera en conjunto sino que lo hace con la tabla resultado (o tabla derivada) del primer JOIN.
Esto significa que si el primer LEFT JOIN devuelve resultados válidos además de los NULL, será sobre esos resultados válidos como tabla virtual, donde se hace el siguiente LEFT JOIN. Y como no se puede hacer un JOIN de ningún tipo contra NULL, sólo devolverá aquellos registros que coincidan con valores reales devueltos por la segunda tabla.
¿Se entiende?
La única posibilidad de que no ocurra eso, es que el segundo LEFT JOIN apunte a una relación entre la primera y tercera tablas directamente.

Una curiosidad es que en los hechos, este LEFT JOIN doble te devolverá el mismo resultado que si hubieses hecho primero un INNER JOIN y luego un LEFT JOIN...

Ahora bien, hay una nota más: Si haces un LEFT JOIN entre la primera y la segunda, seguido de un LEFT JOIN entre la primera y la tercera tablas, en realidad peude devolverte resultados falsos, porque generará un producto cartesiano en el primero JOIN... Es decir, repetirá los resultados del primer LEFT JOIN... varias veces. La explicación de esto es un poquitín complicada, pero en resumen, para hacerlo así habría que resolver el primer LEFT JOIN como una subconsulta...

Como verás, la cosa se complica a medida que agregas JOINs.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)