小编典典

具有IN和NOT IN条件的单个表上的内部查询

sql

这是对我之前回答的问题的修改

我在下表中有数据:

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

下面的查询是在我之前的答案中提供的,而该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

阅读 158

收藏
2021-04-14

共1个答案

小编典典

假设的组合user_idrole_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是必要的,事情会变得更具挑战性。

2021-04-14