sql – 在IN()列表中找不到的那些

前端之家收集整理的这篇文章主要介绍了sql – 在IN()列表中找不到的那些前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
道歉,如果有一个答案已经,我搜索,可能无法想到正确的关键词来找到它.

我有一张超过1000张桌子(如客户).

我有一个查询需要一个已知的客户名单的详细信息(例如CustomerID – 1,79,14,100,123)

IN()函数是我想要用于查询函数.

我知道找到与名单匹配的客户,我会写:

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

猜你在找的MsSQL相关文章