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

SQL - दो मानदंड पूरे होने पर पंक्ति प्रदर्शित न करें

इसका कारण यह है कि NOT IN काम करता है। यदि सूची में कोई भी मान NULL है तो यह कोई परिणाम नहीं लौटाएगा। उदा.

SELECT  [TestColumn] = 3
WHERE   3 NOT IN (1, 2, NULL)

कोई परिणाम नहीं लौटाएगा, और न ही 3.

यदि आप उदाहरण को समतुल्य OR कथन में विस्तारित करते हैं तो आप देखेंगे कि क्यों:

WHERE   3 != 1
AND     3 != 2
AND     3 != NULL

चूंकि 3 != NULL असत्य का मूल्यांकन करता है क्योंकि शून्य के बराबर कुछ भी नहीं है, कथन झूठा लौटाता है।

आप आवश्यक परिणाम 3 तरीकों से प्राप्त कर सकते हैं।

1) ELSE का प्रयोग करें आपके केस स्टेटमेंट में यह सुनिश्चित करने के लिए कि कोई NULL नहीं है परिणाम

SELECT  OrderNumber, Client, Product
FROM    Orders
WHERE    Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)

2) IN बदलें बराबर नहीं, क्योंकि आपका केस स्टेटमेंट वैसे भी केवल 1 मान लौटाएगा

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)

3) अपने तर्क को संशोधित करें, इसे फिर से लिखा जा सकता है

SELECT  OrderNumber, Client, Product 
FROM    Orders
WHERE   NOT (Product = 'product_1' AND Client = 'Client_a')


  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 Server 2008 एक्सप्रेस R2 के लिए डिफ़ॉल्ट बैकअप पथ कैसे प्राप्त कर सकता हूं?

  2. SQL सर्वर 2005 - आपको कितनी बार अनुक्रमणिका का पुनर्निर्माण करना चाहिए?

  3. SQL सर्वर में पंक्तियों में डायनामिक क्वेरी कॉलम कैसे लिखें?

  4. SQL सर्वर डेटाबेस में सभी बाधा उल्लंघनों को कैसे खोजें

  5. SQL Server 2008 FullTextSearch सिंगल कैरेक्टर इन नेम में परिणाम नहीं हैं