Mysql SQL提取用户组ID,其中仅包括指定的用户ID
我有三个表,Users表、UserGroup表和Join表,其中Users和UserGroups是user\u groups\u UsersMysql SQL提取用户组ID,其中仅包括指定的用户ID,mysql,sql,join,Mysql,Sql,Join,我有三个表,Users表、UserGroup表和Join表,其中Users和UserGroups是user\u groups\u Users user_group_ids | user_ids 1 1 1 2 1 3 2 1 2 2 现在,我只需要那些用户组ID,它只包含1个和2个用户ID。因此,对于上面的示例,它应该只输出“2”use
user_group_ids | user_ids
1 1
1 2
1 3
2 1
2 2
现在,我只需要那些用户组ID,它只包含1个和2个用户ID。因此,对于上面的示例,它应该只输出“2”user\u group\u id,而不是1,因为它还包括user\u id 3
那么,SQL查询将如何获得正确的输出呢。
我能想出的最好办法就是
SELECT user_group_id FROM user_groups_users WHERE user_id IN (1, 2) GROUP BY user_group_id HAVING Count(DISTINCT user_id) = 2;
或者只是
SELECT user_group_ids
FROM user_groups
GROUP
BY user_group_ids
HAVING SUM(user_ids IN (1,2)) = COUNT(*);
(我假设(用户ID、用户组ID)是PK的组成部分。如果不是,那么您可能需要包括您的独立运算符)谢谢您的帮助。而且,没错,我需要使用DISTINCT,因为user\u id和user\u group\u id属于联接表user\u groups\u users,因此它们没有被设置为PK。但是,当我在用户ID之前尝试DISTINCT运算符时,我得到的是空集。这没有意义。假设没有
user\u group\u id
可以属于同一个user\u id
多次(反之亦然),那么这些列显然是唯一自然键的候选项,也可能是主密钥。没有假设,user\u group\u id不能属于同一个user\u id。用户和用户组具有多对多关系。但是,即使不对用户ID使用DISTINCT,上面的查询也解决了我的问题。竖起大拇指!
SELECT user_group_ids
FROM user_groups
GROUP
BY user_group_ids
HAVING SUM(user_ids IN (1,2)) = COUNT(*);