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

पोस्टग्रेज में लेफ्ट-आउटर जॉइन Null . के लिए रिटर्निंग वैल्यू नहीं

मैं अपना उत्तर इसलिए दे रहा हूं क्योंकि मुझे अन्य उत्तरों के बारे में महत्वपूर्ण संदेह है। आपको फ़िल्टर आवश्यकताओं के बारे में सावधान रहना होगा। याद रखें, जहां खंड आपके शामिल होने के बाद चलता है . इसलिए यदि कोई फ़िल्टर आवश्यकताएँ हैं कहाँ खंड में जो गैर-बाहरी शामिल तालिका को संदर्भित करता है, आपने (कई परिस्थितियों में) अपने बाहरी जुड़ाव को रद्द कर दिया है। तो अपना sql लेते हुए, ऐसा लगता है कि सबसे सरल उपाय यह है कि या तो उचित जॉइन का उपयोग करें या टेबल नामों को उचित रूप से स्थानांतरित करें, और फिर फ़िल्टर शर्तों को जहां क्लॉज से बाहर और जॉइन क्लॉज में ले जाएं।

SELECT  f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount 
FROM    download_time d 
RIGHT OUTER JOIN fs_fault f ON 
    f.downloadtimeid = d.id
    AND f.faultcode IN (1000,1100)
    AND f.statusid IN(2, 4)
    AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')
    AND d.bunoid = 166501
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode

एक और तरीका जो मुझे लगता है कि समकक्ष होना चाहिए, वह है

SELECT  f.faultcode, f.downloadtimeid, d.downloadtime, count(*) as faultcount 
FROM    download_time d 
RIGHT OUTER JOIN fs_fault f ON 
    f.downloadtimeid = d.id
    AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')
    AND d.bunoid = 166501
WHERE
    f.faultcode IN (1000,1100)
    AND f.statusid IN(2, 4)
GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultcode

चूंकि यह कड़ाई से मायने नहीं रखता है कि fs_fault पर फ़िल्टर की आवश्यकताएँ कहाँ हैं। (और आपका SQL इंजन इसे वैसे भी बदल देगा)।

संपादित करें:यहाँ एक SQLFiddle है जॉइन क्लॉज बनाम जहां क्लॉज पर फ़िल्टरिंग का प्रदर्शन।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सक्रिय व्यवस्थापक डैशबोर्ड (रेल, सक्रिय व्यवस्थापक 1.0, Postgresql डेटाबेस, postgres_ext रत्न) में क्रमबद्ध विशेषता (सरणी) में मानों की घटना की गणना करें

  2. पायथन का उपयोग करते हुए डेटाबेस को एक्सेस करते समय कनेक्शन ऑपरेशन के बीच में बंद कर दिया गया था

  3. स्काला एंड प्ले! स्लिक और पोस्टग्रेएसक्यूएल ऑटो इंक्रीमेंट

  4. डोकर और डोकर-लिखें में एकाधिक डेटाबेस

  5. हाइबरनेट बोली में उपयोगकर्ता परिभाषित PostgreSQL फ़ंक्शन अपवाद फेंकता है