我有一个包含 1000 多个表的表(例如 Customers)。
我有一个查询,需要已知客户列表的详细信息(例如按 CustomerID - 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)
问题
如何查找未返回或未从列表中找到匹配项的客户列表?
假设 Customers 表只有 (1,79,100)。那么就意味着14和123不会匹配。如何找到那些未找到匹配的值。
我在我的例子中进行了简化。我的项目列表有超过 300 个 ID,因此使用 WHERE
条件和一长串 OR
会很麻烦/笨拙。我考虑过与 self 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
关于sql - 选择 IN() 列表中未找到的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209460/