use*_*426 15 sql t-sql sql-server
抱歉,如果已经有了答案,我搜索并可能无法想出正确的关键字来找到它.
我有一张超过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)
题
如何从列表中找到未返回或未找到匹配项的客户列表.
假设Customers表只有(1,79,100).然后它将意味着14和123将不匹配.如何找到找不到匹配项的值.
我在我的例子中简化了.我的项目列表有超过300个ID,因此使用WHERE带有长列表的条件OR会很麻烦/笨拙.我曾想过与自我LEFT JOIN结合并识别NULL配对值,即14和123
有更优雅的方法吗?
Mar*_*ith 17
例如,您可以使用派生表或临时表来保存列表,CustomerId然后找到不匹配的列表EXCEPT.
下面使用表值构造函数作为派生表(与SQL Server 2008+兼容)
SELECT CustomerId
FROM (VALUES(1),
(79),
(14),
(100),
(123)) V(CustomerId)
EXCEPT
SELECT CustomerId
FROM Customers
Run Code Online (Sandbox Code Playgroud)
如果有人偶然发现这个问题并且想知道如何在 PostgreSQL 中做到这一点
VALUES (1),(79),(14),(100),(123) EXCEPT ALL SELECT "CustomerId" from "Customers";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12258 次 |
| 最近记录: |