U moet DISTINCT
. gebruiken , maar je moet ook de ID's tellen, niet de refererende sleutels:
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
Hier is een viool .
Uitleg: De DISTINCT
trefwoord elimineert alle dubbele waarden, wat resulteert in een lijst met unieke waarden.
Als u uw zoekopdracht uitvoert zonder de COUNT()
en SUM()
, krijg je:
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)
Dus als u de COUNT()
. toevoegt en SUM()
, krijg je natuurlijk:
name table1_id table2_id table3_id size test 4 2 2 1224
Echter, met behulp van DISTINCT
met uw zoekopdracht zal niet helpen omdat u duidelijk de dubbele waarden kunt zien, wat zal resulteren in:
name table1_id table2_id table3_id size test 1 1 1 1224
Als u nu mijn zoekopdracht uitvoert zonder de COUNT()
en SUM()
, krijg je:
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)
Als u de COUNT()
. toevoegt en SUM()
, krijgt u precies dezelfde resultaten als uw zoekopdracht:
name table1_id table2_id table3_id size test 4 2 2 1224
Omdat je deze keer echter verschillende waarden hebt (d.w.z. niet allemaal 1), dus als je nu de unieke waarden telt met DISTINCT
, krijg je:
name table1_id table2_id table3_id size test 3 1 2 1224