Трябва да направите едно от двете неща (и двете предполагат, че Table0
има всички екземпляри на num
) -
-
Ако всички редове вече са сумирани за „листовите“ таблици (1 - 4), тогава просто
LEFT JOIN
(сCOALESCE()
в избора) ще бъде достатъчен - дори не се нуждаете отGROUP BY
. -
Ако имате нужда от сумиране на редовете, ще трябва да ги сумирате преди присъединяването, като се има предвид, че в противен случай множество редове на брой в различни таблици ще доведат до умножение на резултатите .
Нещо като това:
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
(работещ пример за SQLFiddle )