TId || Status
--------------
4789 12
4789 5
4789 5
3696 12
3696 12
4568 12
4568 12
我有这个表,我想要的是选择所有状态都是12的TId。
我的预期结果如下:
3696
4568
有人可以帮我这个吗?。
答案 0 :(得分:2)
聚合和having
子句是解决此问题的好方法。我会比较最小值和最大值:
select t.tid
from table t
group by t.tid
having min(status) = max(status) and min(status) = 12;
但还有其他方法。如果您的表格为tid
,则可以使用exists
和not exists
:
select tids.*
from tids
where not exists (select 1 from table t2 where t2.tid = tids.tid and t2.tid <> 12);
此方法可以利用tids
上的索引,并且不需要聚合。
答案 1 :(得分:1)
按tid
列分组,只选择status = 12
select tid
from your_table
group by tid
having sum(case when status <> 12 then 1 else 0 end) = 0