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

时间:2015-09-18 13:34:18

标签: mysql sql

我有一个看似简单的SQL问题,但我无法找到解决方案......

我有3张桌子:

1)"用户" (id,lastname,firstname)

2)" user_x_group" (id_user,id_group)

3)" group" (id,name)

A"用户"可以有很多" group"。

同时获取组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组中的所有用户。

怎么做?

4 个答案:

答案 0 :(得分:5)

执行GROUP BY并要求(HAVING)找到多个不同的id_group

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_groups。

备选HAVING子句,适用于两组:

having max(id_group) <> min(id_group)

答案 1 :(得分:2)

SELECT *
FROM user u 
JOIN user_x_group x ON x.id_user = u.id and x.id_group = 1
JOIN user_x_group x1 ON x.id_user = x1.id_user and x1.id_group = 2

对于每个join条件,您可以id_group两次,以获得两个组中的所有用户。

答案 2 :(得分:2)

以下是使用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'
)

答案 3 :(得分:1)

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')