MySQL找到匹配的行集

时间:2018-05-03 17:04:20

标签: mysql sql

我有一个交叉引用表,它提供用户和用户组表之间的多对多关系。它包含两个相关列:group_iduser_id(惊讶,惊讶!)。当用户想要创建新组时,我想首先检查该组用户是否已作为一个组存在 基本上我会将问题定义为"给定一组用户ID,找到与用户ID集匹配的任何行集,并且所有行共享相同的组ID"。

修改

我正在寻找确切的用户组,除了查看包含这些用户以及其他用户的结果集组外,没有兴趣。

示例数据

sample data

我有预感,子查询是要走的路,但我无法弄清楚如何安排它。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

select groupid
from usergroups ug
where userid in ($user1, $user2, . . . , $usern)
group by groupid
having count(*) = <n>;

这将返回所有提供用户列表的组。

如果您想要完全设置,那么:

select groupid
from usergroups ug
group by groupid
having count(*) = sum( userid in ($user1, $user2, . . . , $usern) );

这假设群体没有两次相同的用户(不难调整,但条件变得更复杂)。