【问题标题】:Oracle correlated subqueryOracle 相关子查询
【发布时间】: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

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

【问题讨论】:

  • 分享样本数据及其输出
  • 所以三个都会输出

标签: sql oracle subquery


【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多