我有一个交叉引用表,它提供用户和用户组表之间的多对多关系。它包含两个相关列:group_id
和user_id
(惊讶,惊讶!)。当用户想要创建新组时,我想首先检查该组用户是否已作为一个组存在
基本上我会将问题定义为"给定一组用户ID,找到与用户ID集匹配的任何行集,并且所有行共享相同的组ID"。
修改:
我正在寻找确切的用户组,除了查看包含这些用户以及其他用户的结果集组外,没有兴趣。
示例数据
我有预感,子查询是要走的路,但我无法弄清楚如何安排它。任何帮助将不胜感激!
答案 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) );
这假设群体没有两次相同的用户(不难调整,但条件变得更复杂)。