sql >> Database >  >> RDS >> Oracle

ik wil alle namen van managers en hun naam van alle managers vinden in Oracle SQL

Als ik je goed heb begrepen, wil je alleen managers selecteren.

Het volgende voorbeeld is gebaseerd op het schema van Scott.

Hier zijn alle medewerkers, samen met hun managers (hiërarchisch) zodat het gemakkelijker is om de managers te herkennen.

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>

Extra WHERE clausule geeft alleen managers terug:

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>

Vervanging van wat wordt geselecteerd met SYS_CONNECT_BY_PATH , krijgen we een andere uitvoer:

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>

Of, door uw stappen te volgen, met een self-join van de EMP tafel krijgen we

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>

Kies degene die het beste bij je past. Ik denk dat andere leden andere opties zullen voorstellen.




  1. Hoe te controleren of de cursor records in orakel retourneert?

  2. Gebruikersgegevens manipuleren in MySQL

  3. Een extra kolomwaarde toevoegen met INSERT ... SELECT in MySQL

  4. Hoe codeer je een apostrof zodat deze doorzoekbaar is in mysql?