2016-03-06 53 views
0

我不明白它增加了什麼查詢的結果。從我正在學習這本書:在SELECT列表中的前面

如果前綴列名和在 選擇列表PRIOR(前選擇EMPLOYEE_ID,...),您指定的「前」行的價值。

SELECT PRIOR EMPLOYEE_ID, MANAGER_ID, LPAD(' ', LEVEL * 2) || EMPLOYEES.JOB_ID 
    FROM EMPLOYEES 
    START WITH EMPLOYEE_ID = 100 
    CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID; 

我看到的唯一區別是,它由1

回答

2

PRIOR僅從遍歷層次結構中的先前記錄獲取記錄。
我認爲已瞭解它是如何工作的最好方式是用一個簡單的層次發揮:

create table qwerty(
    id int, 
    name varchar2(100), 
    parent_id int 
); 

insert all 
into qwerty values(1, 'Grandfather', null) 
into qwerty values(2, 'Father', 1) 
into qwerty values(3, 'Son', 2) 
into qwerty values(4, 'Grandson', 3) 
select 1234 from dual; 

下面的查詢遍歷以上層次:

select level, t.* 
from qwerty t 
start with name = 'Grandfather' 
connect by prior id = parent_id 

    LEVEL   ID NAME     PARENT_ID 
---------- ---------- -------------------- ---------- 
     1   1 Grandfather      
     2   2 Father      1 
     3   3 Son       2 
     4   4 Grandson      3 

如果再加上「此前名」來上面的查詢,然後顯示「父」的名稱。該值取自層次結構中的prevoius記錄(來自LEVEL-1)

select level, prior name as parent_name, t.* 
from qwerty t 
start with name = 'Grandfather' 
connect by prior id = parent_id; 

    LEVEL PARENT_NAME     ID NAME     PARENT_ID 
---------- -------------------- ---------- -------------------- ---------- 
     1        1 Grandfather      
     2 Grandfather     2 Father      1 
     3 Father      3 Son       2 
     4 Son       4 Grandson      3 
0

PRIOR運營商增加了在員工的第一行和增量ID的NULL值使用CONNECT BY子句中的層級構建返回前值。

WITH hierarchy(id, parent_id, value) AS (
    SELECT 1, NULL,   'root' FROM dual UNION ALL 
    SELECT 2, 1,  'child 1' FROM dual UNION ALL 
    SELECT 3, 1,  'child 2' FROM dual UNION ALL 
    SELECT 4, 3, 'grand child 1' FROM dual 
) 
SELECT 
    hierarchy.*, LEVEL depth, PRIOR value 
FROM 
    hierarchy 
START WITH 
    parent_id IS NULL 
CONNECT BY 
    PRIOR id = parent_id 

這個簡單的查詢連接從根到葉子的行。 PRIORVALUE列返回行的父行(在層次結構中的前驅)的VALUE列的值,因此'grand child 1'父項爲'child 2'或'child 1'parent爲'root'。 '根',層次結構中的第一行(LEVEL = 1)沒有任何父項,因此PRIOR返回NULL

如果以相反的方向連接層次結構,從葉子到根,PRIOR運算符將返回用於連接所查看行的子行。

LEVEL列顯示層次結構中特定行的深度。

相關問題