sql >> Base de Datos >  >> RDS >> Oracle

quiero encontrar todos los nombres de los administradores y el nombre de todos los administradores en Oracle SQL

Si te entendí correctamente, solo quieres seleccionar gerentes.

El siguiente ejemplo se basa en el esquema de Scott.

Aquí están todos los empleados, junto con sus gerentes (jerárquicamente) para que sea más fácil identificar a los 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>

WHERE adicional la cláusula solo devuelve administradores:

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>

Sustituyendo qué se está seleccionando con SYS_CONNECT_BY_PATH , obtendremos una salida 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>

O, siguiendo tus pasos, con una autounión del EMP mesa, obtenemos

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>

Elige el que más te convenga. Creo que otros miembros sugerirán otras opciones.