आपको DISTINCT
. का उपयोग करना होगा , लेकिन आपको आईडी गिनने की भी आवश्यकता है, न कि विदेशी कुंजियों की:
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
यह रहा एक fiddle ।
स्पष्टीकरण: 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