sql >> Databáze >  >> RDS >> Mysql

Plné vnější spojení SQL s více tabulkami

Musíte udělat jednu ze dvou věcí (a obě předpokládají, že Table0 má všechny výskyty num ) -

  1. Pokud jsou již sečteny všechny řádky pro „listové“ tabulky (1–4), pak stačí jednoduchý LEFT JOIN (s COALESCE() ve výběru) postačí - nepotřebujete ani GROUP BY .

  2. Pokud potřebujete sečíst řádky, budete je muset sečíst před spojení, protože jinak více řádků na počet v různých tabulkách způsobí, že se výsledky násobí .

Něco jako toto:

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

(funguje příklad SQLFiddle )



  1. MYSQL - Jak spojit dva dotazy a vynechat prvky nalezené ve druhém dotazu (nebo snad nějaké lepší řešení?)

  2. Naplňování JTree z databáze

  3. Jak zjistím, zda tabulka mysql používá myISAM nebo InnoDB Engine?

  4. Lze k pojmenování sloupce tabulky MySQL použít číslo?