这是对我之前回答的问题的修改
我在下表中有数据:
ROLE_ID | USER_ID ------------------ 14 | USER A 15 | USER A 11 | USER B 13 | USER D 13 | USER A 15 | USER B 15 | USER D 12 | USER C 15 | USER C
我想获取仅包含13和15的用户ID。因此,根据上面的示例,我只能返回 USER D
USER D
下面的查询是在我之前的答案中提供的,而该NOT IN部分是我添加的,但是并没有达到目标。
NOT IN
select user_id from my_table where role_id in (13,15) AND role_id not in (11,14) group by user_id. having count(distinct role_id) = 2
假设的组合user_id和role_id是独一无二的,你可以这样做
user_id
role_id
select user_id from my_table where role_id in (13,15,11,14) group by user_id. having sum( case when role_id in (13,15) then 1 else 0 end) = 2 and sum( case when role_id in (11,14) then 1 else 0 end) = 0
如果user_idand的组合role_id不是唯一的,那么distinct原始的incount是必要的,事情会变得更具挑战性。
distinct
count