इसका कारण यह है कि 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')