我希望能够轻松检查查询中提供的那些唯一标识符在表中不存在。
为了更好地解释,这就是我现在要做的,检查表中不存在列表“1、2、3、4”的哪些 ID:
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
,假设该表不包含 ID 为 2 的行。- 将结果转储到 Excel
- 在搜索结果列表中的每个列表值的原始列表上运行 VLOOKUP。
- 任何导致 的 VLOOKUP 都
#N/A
位于表中未出现的值上。
我认为必须有更好的方法来做到这一点。理想情况下,我正在寻找类似的东西
要检查的列表 -> 查询要检查的表 -> 列表中的成员不在表中
使用
EXCEPT
:请参阅SqlFiddle。
构造
values
函数仅适用于 SQL Server 2008 或更高版本。对于 2005 年,使用如this SO answer中所述。
我会建立一个包含您正在搜索的 ID 的表变量或临时表......然后使用 Remus 的解决方案,减去 2008 年的语法糖:
我现在比我提出这个问题时聪明了几年(并且拥有更新的 SQL Server),所以为了庆祝我提出这个问题而获得的著名问题徽章,这就是我现在要做的。(我想我从那以后就再也没有使用过
EXCEPT
运算符了。)我想说
LEFT JOIN
下面的方法比EXCEPT
你可以在不需要 CTE 的情况下与其他连接组合起来更有用。