Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

tôi muốn tìm tất cả tên người quản lý và tên tất cả người quản lý của họ trong oracle SQL

Nếu tôi hiểu bạn đúng, bạn chỉ muốn chọn những người quản lý.

Ví dụ sau đây dựa trên lược đồ của Scott.

Dưới đây là tất cả nhân viên, cùng với người quản lý của họ (theo thứ bậc) để việc phát hiện người quản lý dễ dàng hơn.

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 bổ sung mệnh đề chỉ trả lại người quản lý:

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>

Thay thế cái gì đang được chọn với SYS_CONNECT_BY_PATH , chúng tôi sẽ nhận được một đầu ra khác:

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>

Hoặc, làm theo các bước của bạn, với sự tự tham gia của EMP bảng, chúng tôi nhận được

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>

Chọn một trong những phù hợp với bạn nhất. Tôi tin rằng các thành viên khác sẽ đề xuất các lựa chọn khác.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tách hàng thành cột trong oracle

  2. Câu lệnh UPDATE:đánh giá lại truy vấn con sau mỗi SET

  3. Sử dụng như '%' và so khớp các giá trị NULL với NUMBER cột

  4. Cơ sở dữ liệu Oracle 20c Các tính năng mới

  5. Xóa các số được tìm thấy trong cột chuỗi