Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pełne łączenie zewnętrzne SQL z wieloma tabelami

Musisz zrobić jedną z dwóch rzeczy (i obie zakładają, że Table0 ma wszystkie wystąpienia num ) -

  1. Jeśli wszystkie wiersze są już zsumowane dla tabel 'leaf' (1 - 4), to proste LEFT JOIN (z COALESCE() w zaznaczeniu) wystarczy - nie potrzebujesz nawet GROUP BY .

  2. Jeśli chcesz zsumować wiersze, musisz je zsumować przed sprzężenia, biorąc pod uwagę, że w przeciwnym razie wiele wierszy na liczbę w różnych tabelach spowoduje mnożenie wyników .

Coś takiego:

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

(działający przykład SQLFiddle )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO lastInsertId dla MySQL to wyścig?

  2. Jak połączyć Androida z MySQL za pomocą sterownika Mysql JDBC

  3. Jak zmienić kolejność klucza podstawowego?

  4. Potrzebne przenośne rozwiązanie SQL upsert (insert+update)

  5. Czy możliwe jest wyszukiwanie całego podanego słowa w wyszukiwaniu pełnotekstowym mysql