Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL提取用户组ID,其中仅包括指定的用户ID_Mysql_Sql_Join - Fatal编程技术网

Mysql SQL提取用户组ID,其中仅包括指定的用户ID

Mysql 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

我有三个表,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”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(*);