6

我正在尝试编写一个查询,该查询将返回哪些主机缺少软件:

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

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

4

2 回答 2

18

我认为更简单的方法是:

select software
from HostSoftware hs
group by software
having max(case when software = 'Title2' then 1 else 0 end) = 0

这不需要相关的子查询。而且,它应该会在大多数数据库上产生更好的执行计划。

于 2012-05-27T13:26:06.370 回答
13
SELECT Host FROM HostSoftware
WHERE NOT EXISTS (
    SELECT * FROM HostSoftware AS InnerSoftware
    WHERE InnerSoftware.Host = HostSoftware.Host AND InnerSoftware.Software ='Title2'
)
于 2012-05-27T08:26:37.220 回答