Oracle使用相关子查询时获取多列

问题描述

我的(斯科特)目标是使用相关子查询获取经理的姓名,工资和部门名称。 如下所示,我可以得到预期的结果,但是类似的子查询已经使用了几次。 还有另一种整洁的方式(没有重复以下类似的模式)?

SELECT
    O.ENAME EMP_NAME,(SELECT disTINCT FirsT_VALUE(I.ENAME) OVER (PARTITION BY NULL ORDER BY I.SAL DESC)
        FROM SCott.EMP I
        WHERE I.EMPNO=O.MGR  --correlated to outer
     ) AS MGR_NAME,(SELECT disTINCT FirsT_VALUE(I.SAL) OVER (PARTITION BY NULL ORDER BY I.SAL DESC)
        FROM SCott.EMP I
        WHERE I.EMPNO=O.MGR  --correlated to outer
     ) AS MGR_SAL,(SELECT disTINCT FirsT_VALUE(I.DEPTNO) OVER (PARTITION BY NULL ORDER BY I.SAL DESC)
        FROM SCott.EMP I
        WHERE I.EMPNO=O.MGR  --correlated to outer
     ) AS MGR_DEPTNO
    from SCott.EMP O;

解决方法

select  e.ename emp_name,m.ename mgr_name,m.sal mgr_sal,m.deptno mgr_deptno
from    emp e left join emp m
on      e.mgr = m.empno
order   by m.deptno,e.ename;

输出:

enter image description here