SQL查询以识别缺少数组值的记录

时间:2019-06-07 17:58:57

标签: sql-server

我有一张桌子,它有以下字段:ID,程序

示例表:

ID    Program
-----------------
1  office
1  internet explorer
1  Antivirus
2  office
2  internet explorer
2  messenger
2  bitcoin
3  office
3  internet explorer
3  Antivirus

我需要知道如何构造查询以提取不包含行程序值“防病毒”的ID。因此,针对该示例的查询应返回ID 2

这是用于MS SQL服务器的。我想我想对每个ID进行某种循环搜索。

1 个答案:

答案 0 :(得分:1)

一种方法是NOT IN

select distinct id
from example
where id not in (select id from example where program = 'antivirus')

另一个是NOT EXISTS

select distinct e1.id
from example e1
where not exists (select 1 from example e2 where e2.program = 'antivirus' and e2.id = e1.id )

另外,关于SQL Server中的循环的注释。一般来说,您想不惜一切代价避免循环。 SQL Server在集合中效果最佳,并且任何循环或迭代过程在SQL Server中都无法正常执行。