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

एसक्यूएल:उन रिकॉर्ड्स का चयन करें जहां सभी जुड़े हुए रिकॉर्ड कुछ शर्तों को पूरा करते हैं

यह मानते हुए कि सहसंबंध की कोई आवश्यकता नहीं है, उपयोग करें:

SELECT a.*
  FROM A a
 WHERE EXISTS(SELECT NULL
                FROM B b
              HAVING MIN(b.some_val) > a.val)

यदि आपको सहसंबंध की आवश्यकता है:

SELECT a.*
  FROM A a
 WHERE EXISTS(SELECT NULL
                FROM B b
               WHERE b.id = a.id
              HAVING MIN(b.some_val) > a.val)

स्पष्टीकरण

EXISTS पहले मैच के आधार पर एक बूलियन पर मूल्यांकन करता है - यह IN का उपयोग करने की तुलना में तेज़ बनाता है, और - जॉइन का उपयोग करने के विपरीत - पंक्तियों को डुप्लिकेट नहीं करेगा। चयन भाग कोई मायने नहीं रखता - आप इसे EXISTS SELECT 1/0 ... में बदल सकते हैं और क्वेरी अभी भी काम करेगी, हालांकि शून्य त्रुटि से स्पष्ट विभाजन है।

EXISTS . के भीतर सबक्वेरी सबसे छोटा B.some_val प्राप्त करने के लिए कुल फ़ंक्शन MIN का उपयोग करता है - यदि वह मान a.val मान से बड़ा है, तो a.val सभी b मानों से छोटा है। केवल एक WHERE . की आवश्यकता है खंड सहसंबंध के लिए है - कुल कार्यों का उपयोग केवल HAVING . में किया जा सकता है खंड।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL डेटाबेस के साथ वेब ऐप में पूर्ण ऑफ़लाइन कार्यक्षमता कैसे प्राप्त करें?

  2. CSV फ़ाइल में हेडर के साथ CSV फ़ाइल से PostgreSQL तालिका में कैसे कॉपी करें?

  3. तालिका विदेशी कुंजियों को कैसे सूचीबद्ध करें

  4. मैं PostgreSQL में किसी विशेष स्कीमा के डेटाबेस में संग्रहीत सभी कार्यों की सूची कैसे प्राप्त कर सकता हूं?

  5. कनेक्शन.सेलेक्ट_वैल्यू केवल पीजी रत्न के साथ पोस्टग्रेज में स्ट्रिंग्स लौटाता है