Oracle
 sql >> Base de données >  >> RDS >> Oracle

je veux trouver tous les noms de gestionnaires et leur nom de tous les gestionnaires dans oracle SQL

Si je vous ai bien compris, vous ne voulez sélectionner que des gestionnaires.

L'exemple suivant est basé sur le schéma de Scott.

Voici tous les employés, ainsi que leurs managers (hiérarchiquement) afin qu'il soit plus facile de repérer les managers.

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 supplémentaire la clause renvoie uniquement les gestionnaires :

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>

Remplacer quoi est sélectionné avec SYS_CONNECT_BY_PATH , nous obtiendrons une sortie différente :

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, en suivant vos étapes, avec une auto-jointure du EMP table, on obtient

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>

Choisissez celui qui vous convient le mieux. Je pense que d'autres membres suggéreront d'autres options.