sql >> Base de Datos >  >> RDS >> Mysql

Combinación externa completa de SQL con varias tablas

Debe hacer una de dos cosas (y ambas asumen que Table0 tiene todas las instancias de num ) -

  1. Si todas las filas ya están sumadas para las tablas de 'hojas' (1 - 4), entonces un simple LEFT JOIN (con un COALESCE() en la selección) será suficiente; ni siquiera necesita el GROUP BY .

  2. Si necesita sumar las filas, tendrá que sumarlas antes la combinación, dado que, de lo contrario, varias filas por número en diferentes tablas harán que los resultados multipliquen .

Algo como esto:

SELECT Table0.num, COALESCE(Table1.qty, 0), COALESCE(Table2.qty, 0), 
                   COALESCE(Table3.qty, 0), COALESCE(Table4.qty, 0)
FROM Table0
LEFT JOIN (SELECT num, SUM(qty1) as qty
           FROM Table1
           GROUP BY num) Table1
ON Table1.num = Table0.num
LEFT JOIN (SELECT num, SUM(qty2) as qty
           FROM Table2
           GROUP BY num) Table2
ON Table2.num = Table0.num
LEFT JOIN (SELECT num, SUM(qty3) as qty
           FROM Table3
           GROUP BY num) Table3
ON Table3.num = Table0.num
LEFT JOIN (SELECT num, SUM(qty4) as qty
           FROM Table4
           GROUP BY num) Table4
ON Table4.num = Table0.num

(trabajando ejemplo de SQLFiddle )