Sql have子句中的多重条件
我有一个如下表(使用SQL server 2008 R2): 我需要选择所有的Sql have子句中的多重条件,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一个如下表(使用SQL server 2008 R2): 我需要选择所有的ID,它们都有IsBad=1。所以,查询上面的表将返回ID:101。它不能返回102或100,因为这些ID至少有一个IsBad=0 我试着在下面提问 select id,count(distinct isBad) as Total from Data group by id having count(distinct isBad)= 1 此查询包括具有所有IsBad=0的ID。但是我不需要。我试图使用和在havin
ID
,它们都有IsBad=1
。所以,查询上面的表将返回ID:101
。它不能返回102
或100
,因为这些ID至少有一个IsBad=0
我试着在下面提问
select id,count(distinct isBad) as Total
from Data
group by id
having count(distinct isBad)= 1
此查询包括具有所有IsBad=0
的ID。但是我不需要。我试图使用和在having
子句中添加更多的条件,但出现了错误
如何进行?感谢您的帮助
编辑:我需要对一个有5000万条记录的表运行查询。因此,需要优化查询以在更短的时间内返回结果
select *
from Data d1
where not exists
(
select *
from Data d2
where d1.id = d2.id
and d2.IsBad = 0
)
如果您只是在查找id
,可以使用:
select distinct id
... rest of the query is the same ...
如果您只是在查找id
,可以使用:
select distinct id
... rest of the query is the same ...
反向-您想要“所有的ID都有IsBad=1”,这意味着该ID不能有任何IsBad=0:
SELECT ID FROM Data WHERE ID NOT IN (
SELECT ID FROM Data WHERE IsBad = 0
)
反向-您想要“所有的ID都有IsBad=1”,这意味着该ID不能有任何IsBad=0:
SELECT ID FROM Data WHERE ID NOT IN (
SELECT ID FROM Data WHERE IsBad = 0
)
当前答案的缓慢可能是由于在不存在的地方使用了子句。我通常通过使用左连接
并检查是否缺少匹配来解决性能问题
select *
from Data d1
left join (select * from Data where IsBad = 0) d2
on d1.id = d2.id
where d2.id is null
这是一篇老文章,因此它可能不会帮助原始个人,但可能其他人会受益。当前答案的缓慢可能是由于在不存在的地方使用了子句。我通常通过使用左连接
并检查是否缺少匹配来解决性能问题
select *
from Data d1
left join (select * from Data where IsBad = 0) d2
on d1.id = d2.id
where d2.id is null
这是一篇老文章,所以它可能不会帮助最初的个人,但可能其他人会受益。+1:像这样。。。我需要对一个有5000万条记录的表运行这个查询。因此,查询需要花费大量时间。这可以优化吗?我已经编辑了我的问题。在(id,IsBad)
上添加索引将有助于+1:像这样。。。我需要对一个有5000万条记录的表运行这个查询。因此,查询需要花费大量时间。这可以优化吗?我已经编辑了我的问题。在(id,IsBad)
上添加索引将有助于+1进行最简单的查询。。。然而,对于一个有大约50万条记录的表来说,执行这些操作需要很长的时间……这些操作可以优化以在更短的时间内返回结果吗?+1对于最简单的查询。。。然而,对于一个有大约5000万条记录的表来说,执行这些操作需要很长的时间……是否可以优化这些操作以在更短的时间内返回结果?