Oracle
 sql >> Baza danych >  >> RDS >> Oracle

chcę znaleźć wszystkie nazwiska menedżerów i ich wszystkich menedżerów w Oracle SQL

Jeśli dobrze cię zrozumiałem, chcesz wybrać tylko menedżerów.

Poniższy przykład jest oparty na schemacie Scotta.

Oto wszyscy pracownicy wraz z ich menedżerami (hierarchicznie), aby łatwiej było ich dostrzec.

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>

Dodatkowe WHERE klauzula zwraca tylko menedżerów:

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>

Zastępowanie co jest wybierany za pomocą SYS_CONNECT_BY_PATH , otrzymamy inny wynik:

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>

Lub, postępując zgodnie z Twoimi krokami, samodołącz do EMP stół, dostajemy

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>

Wybierz ten, który najbardziej Ci odpowiada. Wierzę, że inni członkowie zaproponują inne opcje.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLS-00103:Napotkano symbol końca pliku, gdy oczekiwano jednego z następujących:;

  2. Porównywanie dat w Oracle SQL

  3. Jak sprawić, by moja aplikacja Java identyfikowała się w Oracle podczas połączenia?

  4. Zapytanie w PHP Oracle zapytanie select wewnątrz pętli powolne

  5. Importuj plik CSV do tabeli Oracle za pomocą procedury przechowywanej