Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL Full Outer Join mit mehreren Tabellen

Sie müssen eines von zwei Dingen tun (und beide gehen davon aus, dass Table0 hat alle Instanzen von num ) -

  1. Wenn alle Zeilen für die 'Blatt'-Tabellen (1 - 4) bereits summiert sind, dann ein einfacher LEFT JOIN (mit einem COALESCE() in der Auswahl) reicht aus - Sie brauchen nicht einmal den GROUP BY .

  2. Wenn Sie die Summe der Zeilen benötigen, müssen Sie sie vorher summieren der Join, da sonst mehrere Zeilen pro Zahl in verschiedenen Tabellen dazu führen, dass sich die Ergebnisse multiplizieren .

Etwa so:

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

(funktionierendes SQLFiddle-Beispiel )