Sql 单个表上的内部查询
我在Oracle数据库中有一个表,其中存储了以下数据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所在的
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不起作用。我已经就此提出了一个单独的问题。