Mysql SQL:获取多个特定组中的所有用户
我有一个SQL问题,看起来很简单,但我找不到解决方案 我有三张桌子: 1) “用户”(id、姓、名) 2) “用户组”(id\U用户,id\U组) 3) “组”(id、名称) 一个“用户”可以有多个“组” 要同时获取组1和组2中的所有用户,查询是什么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
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')