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

NOT IN (सबक्वेरी) शून्य पंक्तियों का निर्माण

अगर b अशक्त है, यह कोई बग नहीं है। समस्या यह है कि SQL सर्वर NOT IN बदल जाता है <> 1 AND <> 2 AND <> 3 . की श्रृंखला में आदि। यदि आपके पास <> NULL . है , जो अज्ञात लौटाता है, जिसका इस मामले में अर्थ असत्य है। विभिन्न परिदृश्यों में यह सभी को योग्य या अयोग्य घोषित कर सकता है पंक्तियाँ। LEFT JOIN के बजाय दृष्टिकोण, आपको कहना चाहिए:

FROM dbo.OuterTable AS t
WHERE NOT EXISTS (SELECT 1 FROM x WHERE b = t.a);

यहाँ एक त्वरित प्रदर्शन है:

DECLARE @x TABLE(i INT);
INSERT @x VALUES(1),(2);

DECLARE @y TABLE(j INT);
INSERT @y VALUES(2),(NULL);

SELECT i FROM @x WHERE i NOT IN -- produces zero results
  (SELECT j FROM @y);

SELECT i FROM @x  AS x WHERE NOT EXISTS -- produces one result
  (SELECT 1 FROM @y WHERE j = x.i);

बहुत अधिक विवरण के लिए (और मेट्रिक्स यह साबित करने के लिए कि NOT EXISTS . क्यों सबसे अच्छा विकल्प है):

http://www.sqlperformance.com /2012/12/टी-एसक्यूएल-क्वेरी/लेफ्ट-एंटी-सेमी-जॉइन

इसके अलावा, कृपया गेल शॉ की इस ब्लॉग पोस्ट को पढ़ें:

http://sqlinthewild. co.za/index.php/2010/02/18/not-exists-vs-not-in/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस का चयन करें जिसमें केवल विशिष्ट तालिका हो

  2. SQL सर्वर जैसे क्वेरी केस संवेदी नहीं है

  3. SQL सर्वर में वैरिएबल मेमोरी ग्रांट का समस्या निवारण

  4. चुनिंदा स्टेटमेंट का उपयोग करके कई पंक्तियों को अपडेट करें

  5. क्वेरी के साथ SQL डेटाबेस संदिग्ध मोड को सामान्य मोड में बदलें