Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL Full Outer Join com várias tabelas


Você precisa fazer uma de duas coisas (e ambas assumem que Table0 tem todas as instâncias de num ) -

  1. Se todas as linhas já estiverem somadas para as tabelas 'folha' (1 - 4), então um simples LEFT JOIN (com um COALESCE() no select) será suficiente - você nem precisa do GROUP BY .

  2. Se você precisar somar as linhas, precisará somá-las antes a junção, dado que, caso contrário, várias linhas por num em tabelas diferentes farão com que os resultados multipliquem .

Algo assim:
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

(trabalhando exemplo SQLFiddle )