sql >> Databasteknik >  >> RDS >> Mysql

SQL Full Outer Join med flera tabeller

Du måste göra en av två saker (och båda dessa förutsätter att Table0). har alla instanser av num ) -

  1. Om alla rader redan är summerade för 'blad'-tabellerna (1 - 4), då en enkel LEFT JOIN (med en COALESCE() i select) kommer att räcka - du behöver inte ens GROUP BY .

  2. Om du behöver summera raderna måste du summera dem före sammanfogningen, med tanke på att annars kommer flera rader per num i olika tabeller att göra att resultaten multipliceras .

Något så här:

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

(fungerande SQLFiddle-exempel )



  1. Hur man beställer efter datum i MySQL

  2. hur man konverterar en skrivskyddad viloläge till att skriva under en transaktion (Master/Slave DB)

  3. Hur många poster kan jag lagra i 5 MB PostgreSQL på Heroku?

  4. MySQL INSERT - Kräver fältnamn avgränsning av backtick/accent?