Mysql
 sql >> Base de données >  >> RDS >> Mysql

Jointure externe complète SQL avec plusieurs tables

Vous devez faire l'une des deux choses (et les deux supposent que Table0 a toutes les instances de num ) -

  1. Si toutes les lignes sont déjà additionnées pour les tables 'leaf' (1 - 4), alors un simple LEFT JOIN (avec un COALESCE() dans la sélection) suffira - vous n'avez même pas besoin du GROUP BY .

  2. Si vous avez besoin que les lignes soient additionnées, vous devrez les additionner avant la jointure, étant donné que sinon plusieurs lignes par nombre dans différentes tables entraîneront la multiplication des résultats .

Quelque chose comme ça :

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

(fonctionne exemple SQLFiddle )