Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/03/2012, 09:22
jalde
 
Fecha de Ingreso: diciembre-2011
Mensajes: 35
Antigüedad: 12 años, 5 meses
Puntos: 2
Devolver valores nulos en consulta con clausulas WHERE en un LEFT JOIN

Buenas:

Llevo ya bastante tiempo dándole vueltas y no encuentro ninguna sintaxis que funcione.

Os explico lo que quiero hacer:
  • Hay 4 tablas unidas con JOIN, llamémosles T1,T2,T3 y T4.
  • Van todas enlazadas en línea. Es decir: la T1 tiene un JOIN con la T2, la T2 con la T3 y la T3 con la T4.
  • Entre la T2 y la T3 va un LEFT JOIN. Es decir, tendríamos:
(T1) INNER JOIN (T2) LEFT JOIN (T3) INNER JOIN (T4)
  • Necesito un COUNT de la parte T3-T4.
  • Necesito agrupar los valores según T1.
  • En T3 y en T4 tengo respectivas cláusulas WHERE.



La consulta que he escrito es la siguiente:


Código MySQL:
Ver original
  1. SELECT T1.C11,T2.C21,T2.C22,COUNT(T3.C31) AS column_count
  2. FROM table2 AS T2
  3. INNER JOIN table1 AS T1 ON T2.C23=T1.C12
  4. LEFT JOIN table3 AS T3 ON T2.C21=T3.C32
  5. INNER JOIN table4 AS T4 ON T3.C31=T4.C41
  6. WHERE T1.C13='4' AND T3.C32='1' AND T4.C42='7'
  7. GROUP BY T2.C21
  8. ORDER BY T1.C14 ASC,T2.C22 ASC




Problema? No me devuelve los resultados en los que COUNT es 0.

He probado ya:
  • Mover las cláusulas sobre T3 y T4 junto a las condiciones de los JOIN de esas mismas tablas.
  • Cambiar T3.C32='1' por (T3.C32='1' OR T3.C32=NULL) or (T3.C32='1' OR ISNULL(T3.C32)) y lo mismo con la cláusula de T4.
Y nada. No ha funcionado ninguna de las dos ideas.


Alguien tiene una solución?


Muchas gracias por adelantado!

Última edición por jalde; 05/03/2012 a las 10:13