Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में शामिल हों और COUNT () एकाधिक तालिकाओं पर

आपको 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 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql गठबंधन LIMIT और ORDER BY

  2. mysql हैमिंग दो चरणों के बीच की दूरी

  3. MySQL डेटाबेस को एक सर्वर से दूसरे सर्वर में आयात करना

  4. स्फिंक्स और क्या आपका मतलब था ...? सुझाव विचार। क्या यह काम करेगा?

  5. घातक त्रुटि:बूलियन पर एक सदस्य समारोह तैयार करने के लिए कॉल () में