SQL选择用户同时拥有两个组的位置

时间:2017-01-12 11:25:15

标签: sql sql-server tsql

我有一个包含user_id和group_id的表,我需要恢复两个组中的用户列表。

SELECT * FROM [user_group] 

我的桌子是这样的

User_Id   |  Group_id | 
=========================
1         |      1     
2         |      2    
1         |      3    
4         |      3    
4         |      5    
4         |      2     
4         |      1     
4         |      10  

我需要恢复第1组和第3组中的用户 所以我需要一个选择恢复user_id 1和4

我该怎么办?我尝试插入一个tempTable并选择IN和Or。

2 个答案:

答案 0 :(得分:4)

执行GROUP BY,您使用havingcount distinct结合使用,只返回具有Group_id值的User_Id。

select User_Id
from tablename
where Group_id in (1, 3)
group by User_Id
having count(distinct Group_id) = 2

答案 1 :(得分:1)

试试这个:

SELECT
    [User_Id]
FROM
    [User_group]
WHERE
    [Group_Id] IN (1,3)
GROUP BY
    [User_Id]
HAVING
    COUNT(Group_id) > 1

或另一种方式(只是为了好玩)

SELECT
    ug1.User_Id
FROM
    [user_group] ug1 JOIN [user_group] ug2
    ON ug1.User_Id = ug2.User_Id
WHERE
    ug1.Group_id =1 AND ug2.Group_id =3