Sql 单个表上的内部查询

Sql 单个表上的内部查询,sql,oracle,Sql,Oracle,我在Oracle数据库中有一个表,其中存储了以下数据 ROLE_ID | USER_ID ------------------ 14 | USER A 15 | USER A 11 | USER B 13 | USER A 15 | USER B 12 | USER C 15 | USER C 我想获取角色ID为13和15的所有用户ID。基于上面的例子,我应该只返回用户_A 如果我把查询写在下面 从13,15中角色ID所在的

我在Oracle数据库中有一个表,其中存储了以下数据

ROLE_ID | USER_ID
------------------
 14     | USER A
 15     | USER A
 11     | USER B
 13     | USER A
 15     | USER B
 12     | USER C
 15     | USER C
我想获取角色ID为13和15的所有用户ID。基于上面的例子,我应该只返回用户_A

如果我把查询写在下面

从13,15中角色ID所在的表中选择*;然后我也得到了其他用户


我如何修改查询,以便只返回您想要的用户A

select user_id
  from my_table
 where role_id in (13,15)
 group by user_id.
having count(distinct role_id) = 2

通过使用distinct,您可以确保,如果有两个用户A,您仍然可以得到一个同时具有两个角色ID的用户A

select user_id
  from my_table
 where role_id in (13,15)
 group by user_id.
having count(distinct role_id) = 2
通过使用distinct,您可以确保如果有两个用户A,您仍然可以得到一个同时具有两个角色ID的用户A

SELECT USER_ID FROM table WHERE ROLE_ID=13
        INTERSECT
SELECT USER_ID FROM table WHERE ROLE_ID=15
试试这个

SELECT USER_ID FROM table WHERE ROLE_ID=13
        INTERSECT
SELECT USER_ID FROM table WHERE ROLE_ID=15

您可以通过内部联接执行此操作:

SELECT DISTINCT t1.USER_ID
FROM table t1
JOIN table t2 
 ON t2.USER_ID = t1.USER_ID 
 AND t2.ROLE_ID=15
WHERE t1.ROLE_ID=13

您可以通过内部联接执行此操作:

SELECT DISTINCT t1.USER_ID
FROM table t1
JOIN table t2 
 ON t2.USER_ID = t1.USER_ID 
 AND t2.ROLE_ID=15
WHERE t1.ROLE_ID=13

我只会在HAVNIG条款中这样做:

select user_id
from t
group by user_id
having max(case when role_id = 13 then 1 else 0 end) = 1 and
       max(case when role_id = 15 then 1 else 0 end) = 1

我发现在HAVING子句中使用这些条件可以提供最大的灵活性。您可以使用和条件,或条件,将结果限制为仅具有13和15的用户,或使用相同基本构造的任何用户。

我将仅在HAVNIG子句中执行此操作:

select user_id
from t
group by user_id
having max(case when role_id = 13 then 1 else 0 end) = 1 and
       max(case when role_id = 15 then 1 else 0 end) = 1

我发现在HAVING子句中使用这些条件可以提供最大的灵活性。您可以设置和条件,或将结果限制为只有13和15的用户,或使用相同基本构造的任何用户。

这非常有效!谢谢但是有没有一种方法可以让你的身体状况也不太好呢?例如,基于上面的示例,如果我想设置一个条件,只返回具有13、15但不具有14的ID,该怎么办。简单地在14中添加和角色id不起作用。我已经就此提出了一个单独的问题。这太棒了!谢谢但是有没有一种方法可以让你的身体状况也不太好呢?例如,基于上面的示例,如果我想设置一个条件,只返回具有13、15但不具有14的ID,该怎么办。简单地在14中添加和角色id不起作用。我已经就此提出了一个单独的问题。