Vous devez faire l'une des deux choses (et les deux supposent que Table0
a toutes les instances de num
) -
-
Si toutes les lignes sont déjà additionnées pour les tables 'leaf' (1 - 4), alors un simple
LEFT JOIN
(avec unCOALESCE()
dans la sélection) suffira - vous n'avez même pas besoin duGROUP BY
. -
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 )