道歉,如果有一个答案已经,我搜索,可能无法想到正确的关键词来找到它.
我有一张超过1000张桌子(如客户).
我有一个查询需要一个已知的客户名单的详细信息(例如CustomerID – 1,79,14,100,123)
我知道找到与名单匹配的客户,我会写:
SELECT * FROM客户
客户身份证号码(1,123)
要找到不在列表中的那些,我会写
SELECT * FROM客户
客户不在(1,123)
题
如何找到未返回或未从列表中找到匹配项的客户列表.
假设客户表只有(1,100).那么这意味着14和123将不匹配.如何找到没有找到匹配的值.
我在我的例子中简化了.我的项目列表有超过300个ID,所以使用WHERE条件与长列表的OR将是麻烦/笨拙.我想到结合自我LEFT JOIN和识别NULL配对值,这将是14和123
有更优雅的做法吗?
解决方法
您可以使用派生表或临时表来保存CustomerId列表,然后使用EXCEPT找到不匹配的表.
以下使用table value constructor作为派生表(与sql Server 2008兼容)
SELECT CustomerId FROM (VALUES(1),(79),(14),(100),(123)) V(CustomerId) EXCEPT SELECT CustomerId FROM Customers