Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ich möchte alle Managernamen und alle Managernamen in Oracle SQL finden

Wenn ich Sie richtig verstanden habe, wollen Sie nur Manager auswählen.

Das folgende Beispiel basiert auf dem Schema von Scott.

Hier sind alle Mitarbeiter zusammen mit ihren Vorgesetzten (hierarchisch) aufgeführt, damit die Vorgesetzten leichter zu erkennen sind.

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>

Zusätzliches WHERE -Klausel gibt nur Manager zurück:

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>

was ersetzen wird mit SYS_CONNECT_BY_PATH ausgewählt , erhalten wir eine andere Ausgabe:

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>

Oder, Ihren Schritten folgend, mit einem Selbstbeitritt des EMP Tabelle erhalten wir

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>

Wählen Sie diejenige, die am besten zu Ihnen passt. Ich glaube, andere Mitglieder werden andere Optionen vorschlagen.