我无法理解它为查询结果添加了什么。从我正在学习的书中:
如果您使用PRIOR前缀列名称 选择列表(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;
我看到的唯一区别是,它在第一行中添加了NULL
值,并将员工的ID增加了1。
答案 0 :(得分:3)
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
如果我们在上面的查询中添加“PRIOR name”,则会显示“parent”的名称。此vaue取自层次结构中的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
答案 1 :(得分:0)
PRIOR
运算符使用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
这个简单的查询连接从root到leafs的行。 PRIORVALUE
列返回行的父行(层次结构中的前任)的VALUE
列的值,因此' grand child 1'父母是孩子2'或者'孩子1'父母是' root'。 ' root',层次结构中的第一行(LEVEL = 1
)没有任何父级,因此PRIOR
会返回NULL
。
如果以相反的方向连接层次结构,从叶子到根,PRIOR
运算符将返回用于连接您正在查看的行的子行。
LEVEL列显示层次结构中特定行的深度。