天天看點

Oracle查詢樹型關系(start with connect by prior)

用于B樹結構類型的資料遞歸查詢,給出B樹結構類型中的任意一個結點,周遊其最終父結點或者子結點:

--建立測試表
create table dept_test_demo
(
       id VARCHAR2(5) not null,
       dept VARCHAR2(5),
       parent_dept VARCHAR2(5)
)
--插入資料
insert into dept_test_demo(id,dept,parent_dept) values ('1','1','');
insert into dept_test_demo(id,dept,parent_dept) values ('2','2','1');
insert into dept_test_demo(id,dept,parent_dept) values ('3','3','1');
insert into dept_test_demo(id,dept,parent_dept) values ('4','21','2');
insert into dept_test_demo(id,dept,parent_dept) values ('5','22','2');
insert into dept_test_demo(id,dept,parent_dept) values ('6','23','2');
insert into dept_test_demo(id,dept,parent_dept) values ('7','222','22');
insert into dept_test_demo(id,dept,parent_dept) values ('8','31','3');
insert into dept_test_demo(id,dept,parent_dept) values ('9','32','3');
insert into dept_test_demo(id,dept,parent_dept) values ('10','33','3');
insert into dept_test_demo(id,dept,parent_dept) values ('11','333','33');
           

select * from dept_test_demo

Oracle查詢樹型關系(start with connect by prior)

如上圖所示,1是父部門,2,3是1的子部門;21、22、23是2的子部門,222是22的子部門;31、32、33是3的子部門,333是33的子部門。

現在我們檢視部門2及其所有子部門

select * from dept_test_demo d start with d.dept = 2 connect by prior d.dept = d.parent_dept

Oracle查詢樹型關系(start with connect by prior)

現在我們檢視部門2及其所有父部門

select * from dept_test_demo d start with d.dept = 2 connect by d.dept = prior d.parent_dept

Oracle查詢樹型關系(start with connect by prior)