Oracle
 sql >> база данни >  >> RDS >> Oracle

Искам да намеря имената на всички мениджъри и всичките им имена на мениджъри в oracle SQL

Ако правилно съм те разбрал, искаш да избираш само мениджъри.

Следващият пример е базиран на схемата на Скот.

Тук са всички служители, заедно с техните мениджъри (йерархично), така че да е по-лесно да ги забележите.

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 клауза връща само мениджъри:

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>

Замяна на какво се избира с SYS_CONNECT_BY_PATH , ще получим различен резултат:

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>

Или, следвайки вашите стъпки, със самостоятелно присъединяване на EMP таблица, получаваме

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>

Изберете този, който ви подхожда най-добре. Вярвам, че други членове ще предложат други опции.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо не мога да прехвърлям oracle BLOB от родния java Blob

  2. Как да създадете динамичен sql за с sys_refcursor в oracle

  3. Изваждане на броя дни от дата в PL/SQL

  4. Има ли начин да изберете няколко реда с помощта на параметри?

  5. Получаване на върнатата стойност на PL/SQL функция чрез Hibernate