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

Posted

技术标签:

【中文标题】我想在 oracle SQL 中查找所有经理姓名及其所有经理姓名【英文标题】:i want to find all managers names and their all managers name in oracle SQL 【发布时间】:2018-07-28 07:09:52 【问题描述】:
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】:

如果我理解正确,您只想选择经理。

以下示例基于 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>

选择最适合您的。我相信其他成员会提出其他选择。

【讨论】:

以上是关于我想在 oracle SQL 中查找所有经理姓名及其所有经理姓名的主要内容,如果未能解决你的问题,请参考以下文章

选择语句oracle sql

如何在 pl/sql (oracle 9i) 中查找数据类型的大小?

在 oracle 中使用正则表达式查找 POBOX - PL/SQL

MSSQL所有表中查找某个字段中的一个数据。100分悬赏

在oracle SQL developer中从查询列名中查找表

Oracle SQL 查询让所有代理直接或间接向经理报告