SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
सूची में किसी भी मूल्य के खिलाफ जाँच करता है।
हालाँकि, NOT IN NULL-सहिष्णु नहीं है। यदि उप-क्वेरी मूल्यों का एक सेट लौटाती है जिसमें न्यूल होता है, तो कोई भी रिकॉर्ड वापस नहीं किया जाएगा। (ऐसा इसलिए है क्योंकि आंतरिक रूप से NOT IN idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL
के लिए अनुकूलित है। आदि, जो हमेशा विफल रहेगा क्योंकि NULL से कोई भी तुलना UNKNOWN उत्पन्न करती है, जिससे संपूर्ण अभिव्यक्ति को कभी भी TRUE होने से रोका जा सकता है।)
एक अच्छा, पूर्ण-सहिष्णु संस्करण यह होगा:
SELECT something
FROM someTable
WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)
संपादित करें:मैंने शुरू में यह मान लिया था कि:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
केवल पहले मान के विरुद्ध जांच करेगा। यह पता चला है कि यह धारणा कम से कम SQL सर्वर के लिए गलत है, जहां यह वास्तव में उसकी त्रुटि को ट्रिगर करता है:
Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.