Anda harus menggunakan DISTINCT
, tetapi Anda juga perlu menghitung ID, bukan kunci asing:
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
Ini adalah biola .
Penjelasan: DISTINCT
kata kunci menghilangkan semua nilai duplikat yang menghasilkan daftar nilai unik.
Jika Anda menjalankan kueri tanpa COUNT()
dan SUM()
, Anda mendapatkan:
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)
Jadi jika Anda menambahkan COUNT()
dan SUM()
, Anda jelas mendapatkan:
name table1_id table2_id table3_id size test 4 2 2 1224
Namun, menggunakan DISTINCT
dengan kueri Anda tidak akan membantu karena Anda dapat melihat dengan jelas nilai duplikat, yang akan menghasilkan:
name table1_id table2_id table3_id size test 1 1 1 1224
Sekarang, jika Anda menjalankan kueri saya tanpa COUNT()
dan SUM()
, Anda mendapatkan:
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)
Jika Anda menambahkan COUNT()
dan SUM()
, Anda mendapatkan hasil yang sama persis seperti kueri Anda:
name table1_id table2_id table3_id size test 4 2 2 1224
Namun, karena kali ini Anda memiliki nilai yang berbeda (yaitu tidak semuanya 1), jadi sekarang jika Anda menghitung nilai unik menggunakan DISTINCT
, Anda mendapatkan:
name table1_id table2_id table3_id size test 3 1 2 1224