我有一张桌子,它有以下字段: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进行某种循环搜索。
答案 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中都无法正常执行。