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

एसक्यूएल काम नहीं कर रहा है

SELECT foreignStockId
FROM   [Subset].[dbo].[Products]  

संभवतः एक NULL लौटाता है .

NOT IN यदि कोई NULL है तो क्वेरी कोई पंक्ति नहीं लौटाएगी s NOT IN . की सूची में मौजूद है मूल्य। आप IS NOT NULL . का उपयोग करके उन्हें स्पष्ट रूप से बहिष्कृत कर सकते हैं नीचे के रूप में।

SELECT stock.IdStock,
       stock.Descr
FROM   [Inventory].[dbo].[Stock] stock
WHERE  stock.IdStock NOT IN (SELECT foreignStockId
                             FROM   [Subset].[dbo].[Products]
                             WHERE  foreignStockId IS NOT NULL) 

या NOT EXISTS . का उपयोग करके फिर से लिखें इसके बजाय।

SELECT stock.idstock,
       stock.descr
FROM   [Inventory].[dbo].[Stock] stock
WHERE  NOT EXISTS (SELECT *
                   FROM   [Subset].[dbo].[Products] p
                   WHERE  p.foreignstockid = stock.idstock) 

साथ ही शब्दार्थ है कि आप NOT EXISTS . के लिए निष्पादन योजना चाहते हैं जैसा कि यहां देखा गया है अक्सर सरल होता है।

व्यवहार में अंतर का कारण SQL में उपयोग किए जाने वाले तीन मूल्यवान तर्क है। विधेय True . का मूल्यांकन कर सकते हैं , False , या Unknown .

WHERE क्लॉज का मूल्यांकन True . होना चाहिए पंक्ति को वापस करने के लिए लेकिन NOT IN . के साथ यह संभव नहीं है जब NULL नीचे बताए अनुसार मौजूद है।

'A' NOT IN ('X','Y',NULL) 'A' <> 'X' AND 'A' <> 'Y' AND 'A' <> NULL) के बराबर है

  • 'ए' <> 'एक्स' =True
  • 'ए' <> 'वाई' =True
  • 'ए' <> NULL =Unknown

True AND True AND Unknown Unknown . का मूल्यांकन करता है तीन मूल्यवान तर्क के लिए सत्य सारणी के अनुसार।

निम्नलिखित लिंक में विभिन्न विकल्पों के प्रदर्शन के बारे में कुछ अतिरिक्त चर्चा है।

  • क्या मुझे NOT IN का उपयोग करना चाहिए? , OUTER APPLY , LEFT OUTER JOIN , EXCEPT , या NOT EXISTS ?
  • NOT IN बनाम NOT EXISTS बनाम LEFT JOIN / IS NULL :SQL सर्वर
  • Left outer join बनाम NOT EXISTS
  • NOT EXISTS बनाम 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. SQL सर्वर SMO ने DLL के गुम होने की शिकायत की

  2. मैं एक स्ट्रिंग के लिए SQL सर्वर डेटाबेस कैसे खोजूं?

  3. SQL सर्वर:PIVOTing String डेटा के उदाहरण

  4. SQL सर्वर में डेटाबेस में सभी तालिकाओं के लिए कॉलम विवरण जोड़ें कैसे उत्पन्न करें - SQL सर्वर / टी-एसक्यूएल ट्यूटोरियल भाग 49

  5. AMD EPYC 7002 सीरीज प्रोसेसर और SQL सर्वर