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.