我有具有用户->角色关系的标准表
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
答案 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 BY
和HAVING
:
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
不重复。