SQL Server如何查询列表中未存在于表中的值?
筛选值列表中未存在于SQL Server表中的值
针对你的需求,这里提供几种简洁的实现方式:
方法一:使用LEFT JOIN
通过VALUES子句将值列表转换为虚拟表,再与目标表左连接,筛选出原表中无匹配的记录:
-- 假设目标表名为 TestTable SELECT v.Id FROM (VALUES (1), (2), (3)) AS v(Id) LEFT JOIN TestTable t ON v.Id = t.Id WHERE t.Id IS NULL;
方法二:使用NOT EXISTS
通过NOT EXISTS子查询直接检查值是否存在于目标表中:
SELECT v.Id FROM (VALUES (1), (2), (3)) AS v(Id) WHERE NOT EXISTS ( SELECT 1 FROM TestTable t WHERE t.Id = v.Id );
扩展方案:使用表变量(适合长值列表)
如果值列表较长或需要重复使用,可以先将值存入表变量再查询:
DECLARE @TargetValues TABLE (Id INT); INSERT INTO @TargetValues VALUES (1), (2), (3); SELECT v.Id FROM @TargetValues v WHERE NOT EXISTS ( SELECT 1 FROM TestTable t WHERE t.Id = v.Id );
以上三种方式都能得到预期结果Id=2。
内容的提问来源于stack exchange,提问作者Manta
相关产品推荐
相关产品推荐

