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

MySQL присъединяване и COUNT() на множество таблици

Ще трябва да използвате DISTINCT , но също така трябва да преброите идентификаторите, а не външните ключове:

SELECT
    table1.name,
    COUNT(DISTINCT table2.id) AS table2_count,
    COUNT(DISTINCT table3.id) AS table3_count,
    COUNT(DISTINCT table4.id) AS table4_count,
    SUM(table4.size) AS table4_size
FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_id
LEFT JOIN table3 ON table2.id = table3.table2_id
LEFT JOIN table4 ON table3.id = table4.table3_id
WHERE table1.id = 1

Ето цигулка .

Обяснение: DISTINCT ключова дума елиминира всички дублирани стойности, което води до списък с уникални стойности.

Ако изпълните заявката си без COUNT() и SUM() , получавате:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          1          200 
test  1          (null)     (null)     (null) 
test  1          (null)     (null)     (null) 

Така че, ако добавите COUNT() и SUM() , очевидно получавате:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Въпреки това, използвайки DISTINCT с вашата заявка няма да помогне, защото можете ясно да видите дублиращите се стойности, което ще доведе до:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1224 

Сега, ако изпълните моята заявка без COUNT() и SUM() , получавате:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          2          200 
test  2          (null)     (null)     (null) 
test  3          (null)     (null)     (null) 

Ако добавите COUNT() и SUM() , получавате абсолютно същите резултати като вашата заявка:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Въпреки това, тъй като този път имате различни стойности (т.е. не всички са 1), така че сега, ако преброите уникалните стойности с помощта на DISTINCT , получавате:

name  table1_id  table2_id  table3_id  size
test  3          1          2          1224 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпратете ajax формуляр и останете на същата страница, не работи

  2. Бързо изградете PHP CRUD интерфейс с PDO Advanced CRUD Generator Tool

  3. как да съхранявам видео в база данни с помощта на mysql?

  4. MySQL IN заявките са ужасно бавни с подзаявка, но бързи с изрични стойности

  5. Извличане на удвояващи стойности на функция на масив във всяка позиция на масива?