oracle支援常規的用cte遞迴的方式實現遞迴查詢,也有自己特有的查詢方式,oracle文件中叫層次資料查詢。
這裡通過乙個簡單的樣例來介紹這兩種查詢方式。
資料準備:
create table tbl_test( id number, name varchar2(100), pid number);
/begin
insert into tbl_test(id,name,pid) values('1','10','0');
insert into tbl_test(id,name,pid) values('2','11','1');
insert into tbl_test(id,name,pid) values('3','20','0');
insert into tbl_test(id,name,pid) values('4','12','1');
insert into tbl_test(id,name,pid) values('5','121','2');
end;
/
需求:id = 1結點下全部的子結點(從表中資料能夠看出是1、2、4、5)
oracle特有的遞迴查詢方式:
select * from tbl_test
start with id = 1 -- 開始行(start row)
connect by prior id = pid; -- prior代表上一行(parent row)
cte方式:
with cte(id,name,pid) as
( select id,name,pid
from tbl_test
where id = 1
union all
select b.id,b.name,b.pid
from cte a
inner join tbl_test b on a.id = b.pid
)select * from cte;
以上兩種方法均查出了正確的結果。
上面第一種方法的start with 相當於第二種方法的union all上面的部分,connect by 則相當於union all以下的部分。
cte方法具有可移植性,sql server和db2也支援。
關於cte方法實現遞迴的很多其它例項。還能夠看以下兩遍文章:
sql遞迴查詢實戰
遞迴查詢初體驗
oracle 遞迴查詢 Oracle遞迴查詢
1.1 建立表與插入資料 create table district id number 10 not null,parent id number 10 name varchar2 255 byte not null alter table district add constraint distr...
oracle 逆向遞迴查詢 oracle遞迴查詢
oracle的遞迴查詢 最近在看公司的oa系統,oa系統中基本都會有節點樹,其中對於樹上的資料展示,就是用了資料庫的遞迴查詢,在這裡總結下遞迴查詢。現在存在如下的一棵樹 不會畫樹,將就一下,該樹對應下面建立的表資料。建立如下表 create table dg id number not null,主...
oracle 逆向遞迴查詢 Oracle遞迴查詢
start with.connect by子句遞迴查詢一般用於乙個表維護樹形結構的應用。建立示例表 create table tbl test id number,name varchar2 100 byte pid number default 0 插入測試資料 insert into tbl t...