返回具有所有相应值列表的ID

时间:2010-10-18 19:12:47

标签: sql mysql

我有两列的表......

id    id2
1      1
1      2 
1      3 
2      1
2      2
2      4
3      2
3      3
3      4

我想返回具有id2 in (1, 2, 4)但具有列表中所有值的ID。

在上述情况下,它将返回id = 2。这可能吗?

3 个答案:

答案 0 :(得分:5)

select id
from MyTable
where id2 in (1, 2, 4)
group by id
having count(distinct id2) = 3 --this must match the number of elements in IN clause

<强>更新

如果ID列表是可变的,那么您应该创建一个包含不同ID集的附加表,然后您可以JOIN对其进行过滤。

答案 1 :(得分:1)

您是否暗指relational division?例如供应所有产品的供应商,能够悬挂所有飞机的飞行员等等?

如果是这样,this article在SQL中有许多示例实现。

答案 2 :(得分:0)

执行自联接以一次性测试同一个表中的不同行:

SELECT id
FROM t AS t0
JOIN t AS t1 ON t1.id=t0.id
JOIN t AS t2 ON t2.id=t1.id
WHERE t0.id2=1
AND t1.id2=2
AND t2.id2=4