我想在oracle SQL中找到所有经理姓名及其所有经理姓名

时间:2018-07-28 07:09:53

标签: sql oracle oracle11g

select e.last_name, ee.last_name 
from employees e join employees ee on (e.manager_id = ee.employee_id) 
where last_name in (select last_name 
                    from employees 
                    where employee_id in (select distinct manager_id 
                                          from employees
                                         )
                   );

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则只希望选择经理。

以下示例基于Scott的模式。

这里是所有员工,以及他们的经理(按层次划分),因此更容易发现经理。

SQL> select lpad(' ', (level - 1) * 2) || ename ename
  2  from emp
  3  start with mgr is null
  4  connect by prior empno = mgr;

ENAME
------------------------------------------------------
KING              -- manager
  JONES           -- manager
    FORD          -- manager
      SMITH       -- employee
  BLAKE           -- manager
    ALLEN         -- employee
    WARD          -- employee
    MARTIN        -- employee
    TURNER        -- employee
    JAMES         -- employee
  CLARK           -- manager
    MILLER        -- employee

12 rows selected.

SQL>

附加WHERE子句仅返回管理者:

SQL> select lpad(' ', (level - 1) * 2) || ename ename
  2  from emp
  3  where empno in (select mgr from emp)
  4  start with mgr is null
  5  connect by prior empno = mgr;

ENAME
--------------------------------------------------------
KING
  JONES
    FORD
  BLAKE
  CLARK

SQL>

SYS_CONNECT_BY_PATH替换 ,我们将获得不同的输出:

SQL> select sys_connect_by_path(ename, ' / ') path
  2  from emp
  3  where empno in (select mgr from emp)
  4  start with mgr is null
  5  connect by prior empno = mgr;

PATH
----------------------------------------------------
 / KING
 / KING / JONES
 / KING / JONES / FORD
 / KING / BLAKE
 / KING / CLARK

SQL>

或者按照您的步骤,通过EMP表的自联接,我们得到

SQL> select m1.ename manager, m2.ename his_manager
  2  from emp m1 join emp m2 on m1.mgr = m2.empno
  3  where m1.empno in (select mgr from emp);

MANAGER    HIS_MANAGER
---------- -------------
FORD       JONES
CLARK      KING
BLAKE      KING
JONES      KING

SQL>

选择最适合您的一个。我相信其他成员会建议其他选择。

相关问题