2012-06-21 41 views
10

Giả sử chúng ta có bảng sauKết nối bằng trong Oracle SQL

create table Employee(
    2 EMPNO   NUMBER(3), 
    3 ENAME   VARCHAR2(15 BYTE), 
    4 HIREDATE  DATE, 
    5 ORIG_SALARY NUMBER(6), 
    6 CURR_SALARY NUMBER(6), 
    7 REGION  VARCHAR2(1 BYTE), 
    8 MANAGER_ID NUMBER(3) 
    9 ) 

create table job (
    2 EMPNO   NUMBER(3), 
    3 jobtitle  VARCHAR2(20 BYTE) 
    4 ) 
    5/

Tôi quan tâm đến những gì các truy vấn dưới đây không

SELECT empno, manager_id, ename 
    2 FROM employee 
    3 START WITH empno = 1 
    4 CONNECT BY PRIOR empno = manager_id; 

Như tôi hiểu mã này chọn empno, manager_id, ename từ nhân viên, nó bắt đầu lựa chọn f rom hàng này nơi empno=1, nhưng không thể hiểu dòng này có tác:

CONNECT BY PRIOR empno = manager_id; 

Đây có phải là giống như:

where empno=manager_id? 
+2

[Documents] (http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm) – turbanoff

Trả lời

8
CONNECT BY PRIOR empno = manager_id; 

Điều này sẽ tạo ra đệ quy. Tất cả các bản ghi là một phần của cấp thứ bậc thấp hơn tiếp theo sẽ trở lại. Điều này sẽ trả về một hệ thống phân cấp từ trên xuống dưới cho tất cả các nhà quản lý và các cấp dưới tương ứng của họ.

30 (manager_id) 
    12 
    5 (manager_id) 
     1 
     7 
20 (manager_id) 
    15 
    10 
+1

vậy làm thế nào tôi có thể đoán nếu tôi cần mã như thế này để chọn một cái gì đó? –

+1

Đơn giản khi bạn muốn có thứ gì đó có quan hệ cha-con theo cách phân cấp. – manurajhada

3

Truy vấn đệ quy, nó bắt đầu từ nhân viên # 1 (CEO lẽ) và sau đó đệ quy in tất cả các cấp dưới của mình và sau đó tất cả cấp dưới của họ và vân vân và vân vân (cho đến khi tất cả nhân viên được in).

Một lời giải thích tốt về "BẮT ĐẦU VỚI và kết nối bằng" có thể được tìm thấy here

Các vấn đề liên quan