Mysql
 sql >> база данни >  >> RDS >> Mysql

Пълно външно свързване на SQL с множество таблици

Трябва да направите едно от двете неща (и двете предполагат, че Table0 има всички екземпляри на num ) -

  1. Ако всички редове вече са сумирани за „листовите“ таблици (1 - 4), тогава просто LEFT JOINCOALESCE() в избора) ще бъде достатъчен - дори не се нуждаете от GROUP BY .

  2. Ако имате нужда от сумиране на редовете, ще трябва да ги сумирате преди присъединяването, като се има предвид, че в противен случай множество редове на брой в различни таблици ще доведат до умножение на резултатите .

Нещо като това:

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

(работещ пример за 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. Добавете нова колона към резултата и обединете таблицата

  2. php 5.x 7.x, ssl pdo грешка:Сертификат на партньор CN=`someName' не съответства на очакваното CN='someIP'

  3. Как да повторите изявленията за печат, докато изпълнявате sql скрипт

  4. Грешка:Съществува пространство за таблици за таблица xxx. Моля, ИЗХВЪРЛЕТЕ пространството за таблици преди ИМПОРТ

  5. mysql вмъкване в таблица, ако съществува