DISTINCT
を使用する必要があります 、ただし、外部キーではなくIDをカウントする必要があります:
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