यह मानते हुए कि सहसंबंध की कोई आवश्यकता नहीं है, उपयोग करें:
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
. में किया जा सकता है खंड।