Oracle 相关子查询

Posted

技术标签:

【中文标题】Oracle 相关子查询【英文标题】:Oracle correlated subquery 【发布时间】:2019-02-21 07:59:30 【问题描述】:

我有一个包含字段的表:

USER_ID
MANAGER_USER_ID
COST_CENTER

我需要查询所有这些数据,但是COST_CENTER应该来自经理,所以我做了这个:

select USER_ID, COST_CENTER, MANAGER_USER_ID
from EMDB e
where COST_CENTER in (
    select COST_CENTER
    from EMDB e2
    where e2.USER_ID = e.MANAGER_USER_ID
    );

样本数据:

USER_ID    MANAGER_USER_ID    COST_CENTER
user1      user3              employeeCostCenter1
user2      user3              employeeCostCenter1
user3      manager3           employeeCostCenter2  <-- this is manager

Sample output:
USER_ID    MANAGER_USER_ID    COST_CENTER
user1      user3              employeeCostCenter2  
user1      user3              employeeCostCenter2  
user3      manager3           costCenterOfManager3

但这不起作用(不返回任何内容)。 有什么建议吗?

【问题讨论】:

分享样本数据及其输出 所以三个都会输出 【参考方案1】:

试试这个:

select e.USER_ID,
       e.MANAGER_USER_ID
       e2.COST_CENTER             
    from EMDB e
      inner join EMDB e2 on e2.USER_ID = e.MANAGER_USER_ID

【讨论】:

【参考方案2】:

你可以用这个:

SELECT e.user_id, e.manager_user_id, e2.cost_center
FROM emdb e
INNER JOIN emdb e2
ON e2.user_id = e.manager_user_id;

【讨论】:

【参考方案3】:

下面是如何将子查询放在 select 子句中:

select 
  user_id, 
  manager_user_id,
  (select cost_center from emdb m where m.user_id = e.manager_user_id) as cost_center
from emdb e
order by user_id;

【讨论】:

以上是关于Oracle 相关子查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 中避免相关子查询

Oracle相关子查询问题

Oracle 相关子查询

FROM 列表中的 Oracle 相关子查询

为啥此相关子查询在 Oracle 和 SQL Server 中的工作方式不同

将 TOP 1 相关子查询从 SQL Server 翻译到 Oracle