考虑下表,
+ ----- + ---------- +
| ID |价值|
+ ----- + ---------- +
| 1 | A |
| 1 | B |
| 2 | A |
| 2 | B |
| 2 | C |
| 3 | A |
| 3 | C |
| 4 | A |
| 4 | F |
| 4 | B |
+ ----- + ---------- +
我需要获取ID为1的所有ID的ID;这意味着什么是具有值A和B(两者)的ID
预期ID:1,2,4
答案 0 :(得分:3)
这是一种方法:
select t.id
from t join
t t1
on t1.id = 1 and t1.value = t.value
group by t.id
having count(*) = (select count(*) from t where t.id = 1);
自连接匹配值,仅保留与id = 1
值匹配的行。 having
计算匹配数,以查看是否包含给定id
的所有值。
答案 1 :(得分:1)
另一个选择是计算群组中的A和B:
with t (id, value) as (
select 1, 'A' from dual union
select 1, 'B' from dual union
select 2, 'A' from dual union
select 2, 'B' from dual union
select 2, 'C' from dual union
select 3, 'A' from dual union
select 3, 'C' from dual union
select 4, 'A' from dual union
select 4, 'F' from dual union
select 4, 'B' from dual
)
select id from t group by id
having sum(decode(value,'A',1,0)) > 0
and sum(decode(value,'B',1,0)) > 0;