像“没有”这样的SQL查询?

时间:2012-05-27 08:22:21

标签: sql

我正在尝试编写一个返回主机缺少软件的查询:

Host                    Software
A                       Title1
A                       Title2
A                       Title3 
B                       Title1
B                       Title3
C                       Title4
C                       Title3

如何查询哪些主机缺少Title2(应该是B和C)?我使用COUNT尝试了GROUP BY,HAVING和子查询,但我似乎没有正确的想法。

2 个答案:

答案 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'
)