Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

eu quero encontrar todos os nomes de gerentes e seus nomes de todos os gerentes no Oracle SQL


Se entendi corretamente, você deseja selecionar apenas gerentes.

O exemplo a seguir é baseado no esquema de Scott.

Aqui estão todos os funcionários, juntamente com seus gerentes (hierarquicamente), para que seja mais fácil identificar os gerentes.
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>

Adicional WHERE cláusula retorna apenas gerentes:
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>

Substituindo o que está sendo selecionado com SYS_CONNECT_BY_PATH , obteremos uma saída diferente:
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>

Ou, seguindo suas etapas, com uma auto-junção do EMP mesa, obtemos
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>

Escolha o que melhor lhe convier. Acredito que outros membros irão sugerir outras opções.