Mysql
 sql >> Database >  >> RDS >> Mysql

Join esterno completo di SQL con più tabelle

Devi fare una delle due cose (ed entrambe presuppongono che Table0 ha tutte le istanze di num ) -

  1. Se tutte le righe sono già state sommate per le tabelle 'leaf' (1 - 4), allora un semplice LEFT JOIN (con un COALESCE() nella selezione) sarà sufficiente - non hai nemmeno bisogno del GROUP BY .

  2. Se hai bisogno di sommare le righe, dovrai sommarle prima il join, dato che altrimenti più righe per num in tabelle diverse causeranno la moltiplicazione dei risultati .

Qualcosa del genere:

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

(funzionante esempio SQLFiddle )