我正在尝试编写一个返回主机缺少软件的查询:
Host Software
A Title1
A Title2
A Title3
B Title1
B Title3
C Title4
C Title3
如何查询哪些主机缺少Title2(应该是B和C)?我使用COUNT尝试了GROUP BY,HAVING和子查询,但我似乎没有正确的想法。
答案 0 :(得分:13)
我认为更简单的方法是:
select software
from HostSoftware hs
group by software
having max(case when software = 'Title2' then 1 else 0 end) = 1
这不需要相关的子查询。而且,它应该会在大多数数据库中产生更好的执行计划。
答案 1 :(得分:12)
SELECT Host FROM HostSoftware
WHERE NOT EXISTS (
SELECT * FROM HostSoftware AS InnerSoftware
WHERE InnerSoftware.Host = HostSoftware.Host AND InnerSoftware.Software ='Title2'
)