MySQL查询类似Intersect的函数

时间:2011-03-07 13:58:15

标签: mysql

我有一个Person表,Group表和Group_Person表,其中许多人实体可以有许多组实体。 Group_Person充当中间表,并具有映射到Group表中的group_id和Person表中的person_id的元组(group_id,person_id)。

从Person表中给出0个或更多person_id(从Person表中查询),我想从Group表中找到所有Group,其中,在Group_Person表中,每个person_id都有一个元组(group_id,person_id)。换句话说,每个person_id都映射到一个公共的group_id。

由于MySQL没有INTERSECT功能,我正在考虑进行以下查询(这只返回group_id):

SELECT t1.group_id 
FROM Group_Person AS t1 
JOIN Group_Person AS t2 ON t1.group_id = t2.group_id 
WHERE t1.person_id = xxx AND t2.person_id = yyy;

同样,这里可以有0个或更多个person_ids。这是最好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

我不认为多次加入group_person会为你做这件事。你可能想要这样的东西:

SELECT group_id
FROM Group_Person
WHERE person_id in(put the ids here)
GROUP BY group_id
HAVING count(group_id) = the count of person_ids