sql >> Database >  >> RDS >> Mysql

SQL Full Outer Join met meerdere tabellen

U moet een van de twee dingen doen (en beide gaan ervan uit dat Table0 heeft alle instanties van num ) -

  1. Als alle rijen al zijn opgeteld voor de 'blad'-tabellen (1 - 4), dan is een eenvoudige LEFT JOIN (met een COALESCE() in de selectie) is voldoende - je hebt niet eens de GROUP BY . nodig .

  2. 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 )



  1. Een opgeslagen PROCEDURE oproepen in Toad

  2. MySQL Stored Procedure aanroepen met VB6 met OUT-parameter

  3. Opsommingstekens sorteren in database

  4. De huidige staat van open source back-upbeheer voor PostgreSQL