Bạn cần thực hiện một trong hai điều (và cả hai điều này đều giả định rằng Table0
có tất cả các bản sao của num
) -
-
Nếu tất cả các hàng đã được tổng hợp cho các bảng 'lá' (1 - 4), thì một
LEFT JOIN
đơn giản (vớiCOALESCE()
trong lựa chọn) là đủ - bạn thậm chí không cầnGROUP BY
. -
Nếu bạn cần các hàng được tổng hợp, bạn sẽ cần phải tính tổng chúng trước nối, nếu không thì nhiều hàng trên mỗi số trong các bảng khác nhau sẽ khiến kết quả bị nhân lên .
Một cái gì đó như thế này:
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
(làm việc ví dụ SQLFiddle )