我有一个名为Groups的表,其结构如下...
+--------------+
| Id GroupId |
+--------------+
| 1 3 |
| 2 3 |
| 3 2 |
| 1 2 |
| 2 2 |
| 3 2 |
+--------------+
我想返回Id = 1且另一个Id = 2的GroupId,所以结果应该是3。这是到目前为止我尝试过的事情...
SELECT GroupId FROM Groups G1
WHERE G1.Id = 1 and exists ( select 1
FROM Groups G2
WHERE G2.Id = 2
and G1.GroupId = G2.GroupId)
这很好,直到添加了两个ID都存在的组(组2)。然后,此操作失败,因为子查询返回的值超过1。
我已经考虑过使用HAVING COUNT(*)== 2来尝试让子查询返回仅包含2行计数的组,但是我不确定如何做到这一点,有什么想法吗?
答案 0 :(得分:1)
使用group by
和having
:
select groupid
from groups
where id in (1, 2)
group by groupid
having count(*) = 2;
这假设行是唯一的。如果可以重复,请使用count(distinct id) = 2
。
如果您想要1和2且没有其他 id,则逻辑会稍微复杂一些:
select groupid
from groups
group by groupid
having sum(case when id = 1 then 1 else 0 end) > 0 and
sum(case when id = 2 then 1 else 0 end) > 0 and
count(*) = 2;