Budete muset použít DISTINCT
, ale také musíte počítat ID, ne cizí klíče:
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
Zde je housle .
Vysvětlení: DISTINCT
klíčové slovo eliminuje všechny duplicitní hodnoty, což vede k seznamu jedinečných hodnot.
Pokud spustíte dotaz bez COUNT()
a SUM()
, získáte:
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)
Pokud tedy přidáte COUNT()
a SUM()
, evidentně dostáváte:
name table1_id table2_id table3_id size test 4 2 2 1224
Nicméně pomocí DISTINCT
s vaším dotazem nepomůže, protože můžete jasně vidět duplicitní hodnoty, což bude mít za následek:
name table1_id table2_id table3_id size test 1 1 1 1224
Nyní, pokud spustíte můj dotaz bez COUNT()
a SUM()
, získáte:
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)
Pokud přidáte COUNT()
a SUM()
, získáte přesně stejné výsledky jako váš dotaz:
name table1_id table2_id table3_id size test 4 2 2 1224
Protože však tentokrát máte různé hodnoty (tj. ne všechny jsou 1), tak nyní, pokud spočítáte jedinečné hodnoty pomocí DISTINCT
, získáte:
name table1_id table2_id table3_id size test 3 1 2 1224