sql >> Database teknologi >  >> RDS >> Oracle

Jeg vil gerne finde alle lederes navne og deres alle lederes navn i oracle SQL

Hvis jeg har forstået dig rigtigt, vil du kun vælge ledere.

Følgende eksempel er baseret på Scotts skema.

Her er alle medarbejdere, sammen med deres ledere (hierarkisk), så det er nemmere at få øje på lederne.

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>

Yderligere WHERE klausul returnerer kun ledere:

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>

Erstatter hvad bliver valgt med SYS_CONNECT_BY_PATH , får vi et andet output:

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>

Eller, følg dine trin, med en selvtilslutning af EMP bord, får vi

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>

Vælg den, der passer dig bedst. Jeg tror, ​​at andre medlemmer vil foreslå andre muligheder.




  1. Jquery for at udfylde <table> baseret på <select>

  2. Docker:Drupal-container knyttet til mysql-container kan ikke oprette forbindelse til mysql under Drupal-installation

  3. SQL:Gentag en resultatrække flere gange, og nummerér rækkerne

  4. Hvordan sorterer man tid (i AM / PM) i SQL?