Mysql SQL:获取多个特定组中的所有用户

Mysql SQL:获取多个特定组中的所有用户,mysql,sql,Mysql,Sql,我有一个SQL问题,看起来很简单,但我找不到解决方案 我有三张桌子: 1) “用户”(id、姓、名) 2) “用户组”(id\U用户,id\U组) 3) “组”(id、名称) 一个“用户”可以有多个“组” 要同时获取组1和组2中的所有用户,查询是什么 SELECT * FROM user u JOIN user_x_group x ON x.id_user = u.id WHERE id_group IN ('1', '2') 不正确,因为我获取了组1中的所有用户+组2中的所有用户+组1

我有一个SQL问题,看起来很简单,但我找不到解决方案

我有三张桌子:

1) “用户”(id、姓、名)

2) “用户组”(id\U用户,id\U组)

3) “组”(id、名称)

一个“用户”可以有多个“组”

要同时获取组1和组2中的所有用户,查询是什么

SELECT *
FROM user u 
JOIN user_x_group x ON x.id_user = u.id 
WHERE id_group IN ('1', '2') 
不正确,因为我获取了组1中的所有用户+组2中的所有用户+组1和2中的所有用户。我只需要在一个查询中查询组1和2中的所有用户


如何做到这一点?

按进行分组,并要求(
具有
)找到多个不同的id\u组

SELECT u.*
FROM user u 
JOIN user_x_group x ON x.id_user = u.id 
WHERE id_group IN ('1', '2') 
group by u.id
having count(distinct id_group) >= 2
如果需要,您可以轻松调整为3个或更多id_组

有子句的备选方案,仅适用于2组:

having max(id_group) <> min(id_group)
具有最大值(id组)和最小值(id组)

对于每个
id\u组
条件,您可以
join
两次,每次一次,以获取两个组中的所有用户。

如果您有两个以上的组,并且您只需要这两个组,则可以使用
EXISTS

SELECT *
FROM user u 
WHERE EXISTS 
(
    Select *
    From user_x_group x
    Where x.id_user = u.id 
    And x.id_group = '1'
)
AND EXISTS 
(
    Select *
    From user_x_group x2
    Where x2.id_user = u.id 
    And x2.id_group = '2'
)

因此,如果用户A同时在组1和组2中,他们在用户组表中会有两条记录吗?@evanv:是的,他们在用户组表中会有两条记录
SELECT *
FROM user u 
WHERE EXISTS 
(
    Select *
    From user_x_group x
    Where x.id_user = u.id 
    And x.id_group = '1'
)
AND EXISTS 
(
    Select *
    From user_x_group x2
    Where x2.id_user = u.id 
    And x2.id_group = '2'
)
SELECT *
FROM user 
WHERE
id in (select distinct id_user as id from user_x_group where id_group='1')
AND 
id in (select distinct id_user as id from user_x_group where id_group='2')