U moet een van de twee dingen doen (en beide gaan ervan uit dat Table0
heeft alle instanties van num
) -
-
Als alle rijen al zijn opgeteld voor de 'blad'-tabellen (1 - 4), dan is een eenvoudige
LEFT JOIN
(met eenCOALESCE()
in de selectie) is voldoende - je hebt niet eens deGROUP BY
. nodig . -
Als u de rijen wilt optellen, moet u ze voordat . optellen de join, aangezien anders meerdere rijen per num in verschillende tabellen de resultaten zullen vermenigvuldigen .
Zoiets als dit:
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
(werkend SQLFiddle-voorbeeld )