Oracle
 sql >> Database >  >> RDS >> Oracle

voglio trovare tutti i nomi dei gestori e tutti i nomi dei gestori in Oracle SQL

Se ho capito bene, vuoi selezionare solo i gestori.

L'esempio seguente è basato sullo schema di Scott.

Qui ci sono tutti i dipendenti, insieme ai loro manager (gerarchicamente) in modo che sia più facile individuare i manager.

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 aggiuntivo clausola restituisce solo gestori:

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>

Sostituendo cosa viene selezionato con SYS_CONNECT_BY_PATH , otterremo un output diverso:

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>

Oppure, seguendo i tuoi passaggi, con un'adesione automatica dell'EMP tabella, otteniamo

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>

Scegli quello che fa per te. Credo che altri membri suggeriranno altre opzioni.