mysql - SQL 提取用户组 ID,仅包含指定的用户 ID

标签 mysql sql join

我有三个表,用户表、用户组表以及用户和用户组作为 user_groups_users 的联接表。

user_group_ids | user_ids
    1             1
    1             2
    1             3
    2             1
    2             2

现在,我只想要那些 user_group_ids,其中仅包含 1 和 2 个 user_ids。因此,对于上面的示例,它应该只输出“2”user_group_id,而不是 1,因为它还包括 user_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(CASE WHEN user_ids IN (1,2) THEN 1 ELSE 0 END) = COUNT(*);

或者只是

SELECT user_group_ids 
  FROM user_groups 
 GROUP 
    BY user_group_ids 
HAVING SUM(user_ids IN (1,2)) = COUNT(*);

(我假设 (user_ids,user_group_ids) 是 PK 的组成部分。如果不是,那么您可能需要包含 DISTINCT 运算符)

关于mysql - SQL 提取用户组 ID,仅包含指定的用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20364835/

相关文章:

php - 如何排除三个不同表的查询结果?

c# - 使用 JOIN 的 ADO.NET 实体模型和 LINQ

MySQL-向左连接添加子句

php - 使用PHP;我想检查 mysql 数据库以确保在注册之前没有相同电子邮件地址的记录

mysql - 查询执行时间和解释输出不一致

php + mysql 和夏令时问题 : what are the rules?

sql - 添加新字段与创建单独的表

mysql - SQL LEFT JOIN 与返回 NULL 值的 COUNT

sql - 显示乱序时差

sql - 'cluster'在聚集索引中意味着什么?