道歉,如果已經有這個答案,我搜索了,可能wouldnt認爲正確的關鍵字找到它。選擇那些在IN()名單中找不到的
我有一個超過1000個表(例如客戶)的表。
我有需要的客戶的一個已知列表的詳細信息的查詢(例如通過客戶ID - 1,79,14,100,123)
的IN()函數是我想用在查詢什麼。
我知道找到匹配列表的客戶,我會寫:
SELECT * FROM Customers WHERE CustomerID IN (1,79,14,100,123)
爲了找到那些不在列表中,我會寫
SELECT * FROM Customers WHERE CustomerID NOT IN (1,79,14,100,123)
問題
如何找到Cust列表omers表示未返回或未從列表中找到匹配項。
假設Customers表只有(1,79,100)。那麼這意味着14和123將不會匹配。我如何找到那些找不到匹配的值。
我簡化了我的例子。我的物品列表中有超過300個ID,因此使用WHERE
條件與長列表OR
會很麻煩/笨拙。我曾想過將自己的LEFT JOIN與自己的LEFT JOIN結合在一起,並確定NULL配對值,這將是14和123
是否有更優雅的方法?
的感謝@馬丁史密斯。那回答了!出於興趣,你會知道是否有ANSI SQL兼容版本? – user919426
@ user919426 - EXCEPT絕對是ANSI SQL(儘管Oracle使用非標準的'MINUS')。我認爲表值構造函數也包含在標準的某個版本中。 –
很高興知道。再次感謝! – user919426