0

在一张表中,我有如下记录:

ID, ID1, ID2
1, 2, 3
2, 2, 4
3, 2, 5
4, 3, 3
4, 3, 4
4, 4, 3
4, 4, 4
4, 4, 5

我希望能够找到表中存在的所有 ID1 值,这些值具有所有 ID2 值 3、4 和 5

因此,在这种情况下,我希望某些 SQL 仅提取 ID1 = 2 和 ID1 = 4,但不提取 ID1 = 3,因为对于 ID1=3,仅存在 ID2=3 和 ID2=4 ......所以它缺少一行ID2=5,因此我不希望它包含在我的结果集中。

有没有一种有效的方法来做到这一点?

泰!

4

1 回答 1

4

您将需要使用以下内容来选择具有id2值为 3、4 或 5 的所有行,然后使用具有子句的 group by 以确保返回 3 个不同的id2值:

select id1
from yourtable
where id2 in (3, 4, 5)
group by id1
having count(distinct id2) = 3

请参阅SQL Fiddle with Demo

这种类型的查询称为关系除法

于 2013-04-04T11:42:15.940 回答