选择仅具有必需角色的用户

时间:2019-03-18 07:38:11

标签: mysql sql

我有具有用户->角色关系的标准表

user_id | role_id
----------------
1       |   1
1       |   2
1       |   3
2       |   1
2       |   3
3       |   1
3       |   2
4       |   1
4       |   2
4       |   3
4       |   4

为了清楚理解

1: [1, 2, 3]
2: [1, 3]
3: [1, 2]
4: [1, 2, 3, 4]

我想编写一个查询,以返回仅具有必需角色的用户。例如,如果所需角色为[1、2、3、5],则只有用户1、2、3满足条件,因为用户4具有不需要的角色4

2 个答案:

答案 0 :(得分:2)

您可以使用相关子查询

 select * from tablename a
 where not exists (select 1 from tablename b where a.user_id=b.user_id and role_id not in (1,2,3,5))

答案 1 :(得分:1)

我将使用GROUP BYHAVING

select user_id
from user_roles ur
group by user_id
having sum( role_id not in (1, 2, 3, 5) ) = 0;

NOT EXISTS相比,我更喜欢这样做,因为它返回的user_id不重复。