Du skal bruge DISTINCT
, men du skal også tælle ID'erne, ikke fremmednøglerne:
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
Her er en violin .
Forklaring: DISTINCT
nøgleord eliminerer alle duplikerede værdier, hvilket resulterer i en liste over unikke værdier.
Hvis du kører din forespørgsel uden COUNT()
og SUM()
, får du:
navn tabel1_id tabel2_id tabel3_id størrelsestest 1 1 1 1024 test 1 1 1 200 test 1 (nul) (nul) (nul) test 1 (nul) (nul) (nul)
Så hvis du tilføjer COUNT()
og SUM()
, du får åbenbart:
navn tabel1_id tabel2_id tabel3_id størrelsestest 4 2 2 1224
Men ved at bruge DISTINCT
med din forespørgsel hjælper det ikke, fordi du tydeligt kan se de duplikerede værdier, hvilket vil resultere i:
navn tabel1_id tabel2_id tabel3_id størrelsestest 1 1 1 1224
Nu, hvis du kører min forespørgsel uden COUNT()
og SUM()
, får du:
navn tabel1_id tabel2_id tabel3_id størrelsestest 1 1 1 1024 test 1 1 2 200 test 2 (nul) (nul) (nul) test 3 (nul) (nul) (nul)
Hvis du tilføjer COUNT()
og SUM()
, får du nøjagtig de samme resultater som din forespørgsel:
navn tabel1_id tabel2_id tabel3_id størrelsestest 4 2 2 1224
Men fordi du denne gang har forskellige værdier (dvs. ikke alle er 1), så nu hvis du tæller de unikke værdier ved hjælp af DISTINCT
, får du:
navn tabel1_id tabel2_id tabel3_id størrelsestest 3 1 2 1224