我有一个看似简单的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组中的所有用户。
怎么做?
答案 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')