我的桌子上有1000多个桌子(例如客户)。
我有一个查询,要求了解已知客户列表的详细信息(例如,按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)
问题
如何找到未返回或未从列表中找到匹配项的客户列表?
假设“客户”表仅包含(1,79,100)。那么这将意味着14和123将不匹配。如何找到找不到匹配项的值。
我在示例中进行了简化。我的商品清单有300多个ID,因此,使用WHERE带有较长商品清单的条件OR会很麻烦/笨拙。我曾想过与自我LEFTJOIN结合并确定NULL配对值,即14和123
WHERE
OR
有没有更优雅的方法?
例如,您可以使用派生表或临时表来保存列表,CustomerId然后使用查找不匹配的表EXCEPT。
CustomerId
EXCEPT
下面使用表值构造函数作为派生表(与SQL Server 2008+兼容)
SELECT CustomerId FROM (VALUES(1), (79), (14), (100), (123)) V(CustomerId) EXCEPT SELECT CustomerId FROM Customers