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

एसक्यूएल:उपयोगकर्ता तालिका में उपयोगकर्ता रिकॉर्ड के लिए कई तालिकाओं से गिनती प्राप्त करना। सबसे अच्छा तरीका क्या है?

उपयोग करें:

   SELECT u.userid,
          u.username,
          COALESCE(f.numFiles, 0) AS numFiles,
          COALESCE(p.numPhotos, 0) AS numFiles,
          COALESCE(g.numGroups, 0) AS numGroups
     FROM [USER] u
LEFT JOIN (SELECT t.userid,
                  COUNT(*) AS numFiles
             FROM [FILES] t
         GROUP BY t.userid)f ON f.userid = u.userid
LEFT JOIN (SELECT t.userid,
                  COUNT(*) AS numPhotos
             FROM [PHOTOS] t
         GROUP BY t.userid) p ON p.userid = u.userid
LEFT JOIN (SELECT t.userid,
                  COUNT(*) AS numGroups
             FROM [GROUPS] t
         GROUP BY t.userid) g ON g.userid = u.userid
    WHERE u.userid = 2

इसके लिए आपको एक प्रश्न में होने के लिए OUTER जॉइन का उपयोग करना होगा; सभी तालिकाओं के लिए INNER शामिल होने के लिए आवश्यक होगा कि उपयोगकर्ता के पास परिणाम में होने के लिए FILES, PHOTOS और GROUPS तालिका में कम से कम एक रिकॉर्ड हो। OUTER जॉइन का मतलब है कि कम से कम एक टेबल (FILES, PHOTOS या GROUPS) में रिकॉर्ड वाले उपयोगकर्ताओं को वापस कर दिया जाएगा।

लेकिन जॉइन भी परिणाम को बढ़ाने का जोखिम उठाते हैं, जो कि मेरे उत्तर के पिछले संस्करण में हुई समस्या है। FILES, GROUPS और PHOTOS काउंट के लिए व्युत्पन्न तालिकाओं/इनलाइन दृश्यों का उपयोग करने के लिए क्वेरी को बदलकर, समस्या हल हो गई है और व्युत्पन्न तालिकाओं/इनलाइन दृश्यों के बाहर GROUP BY की कोई आवश्यकता नहीं है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं CodeIgniter में SQL सर्वर डेटाबेस से कैसे जुड़ूँ?

  2. SQL सर्वर 2008 में घंटे और मिनटों का योग

  3. SqlDataSourceEnumerator.Instance.GetDataSources() स्थानीय SQL सर्वर 2008 आवृत्ति का पता नहीं लगाता है

  4. SQL सर्वर 2017 पर CLR सख्त सुरक्षा

  5. VS2010 डेटाबेस प्रोजेक्ट परिनियोजन - SqlDeployTask कार्य अप्रत्याशित रूप से विफल हो गया, NullReferenceException