给出与t
表a
相关的交叉引用表b
:
| id | a_id | b_id |
--------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 7 |
| 5 | 2 | 3 |
| 6 | 3 | 2 |
| 7 | 3 | 3 |
选择a_id
作为给定集的超集的所有b_id
的传统方法是什么?
例如,对于集合(2,3)
,我希望得到结果:
| a_id |
--------
| 1 |
| 3 |
由于a_id
1和3是b_id
唯一的(2,3)
超集集。
到目前为止我找到的最佳解决方案(感谢this answer):
select id
from a
where 2 = (select count(*)
from t
where t.a_id = a.id and t.b_id in (2,3)
);
但我更倾向于在运行查询之前避免计算基数这样的内容。
答案 0 :(得分:1)
您可以简单地将查询调整为:
select id
from a cross join
(select count(*) as cnt
from t
where . . .
) x
where x.cnt = (select count(*)
from t
where t.a_id = a.id and t.b_id in (2,3)
);