一.在oracle中可使用start with...connect by子句
start with...connect by子句遞迴查詢一般用於乙個表維護樹形結構的應用。
建立示例表:
create table tbl_test ( id number, name varchar2(100 byte), pid number default 0 );
插入測試資料:
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');
從root往樹末梢遞迴
select * from tbl_test start with id=1 connect by prior id = pid
從末梢往樹root遞迴
select * from tbl_test start with id=5 connect by prior pid = id
二.寫乙個函式,呼叫函式查詢
--測試資料
create
table
tb(id
char(3
),pid
char(3
),name
nvarchar(10
)) insert
tb select
'001',
null,'
山東省'
union
allselect
'002',
'001',
'煙台市
'union
allselect
'004',
'002',
'招遠市
'union
allselect
'003',
'001',
'青島市
'union
allselect
'005',
null,'
四會市'
union
allselect
'006',
'005',
'清遠市
'union
allselect
'007',
'006',
'小分市'go
--查詢指定節點及其所有子節點的函式
create
function
f_cid(
@idchar(3
)) returns
@t_level
table
(id
char(3
),level
int)
asbegin
declare
@level
intset
@level=1
insert
@t_level
select
@id,
@level
while
@@rowcount
>
0begin
set@level
=@level+1
insert
@t_level
select
a.id,
@level
from
tb a,
@t_level
b where
a.pid
=b.id
andb.
level
=@level-1
endreturn
endgo
--呼叫函式查詢002及其所有子節點
selecta.*
from
tb a,f_cid(
'002
') b
where
a.id
=b.id
SQL 樹形結構遞迴查詢
with as短語,也叫做子查詢部分 subquery factoring 定義乙個sql 片段,改sql 片段會被整個sql語句用到。其中最實用的功能就是資料的遞迴,遞迴的原理 遞迴包括至少兩個查詢,乙個查詢作為遞迴的基點也就是起點,另乙個查詢作為遞迴的成員。with temp as select...
java 遞迴查詢樹形結構
什麼叫做遞迴呢?程式設計師呼叫自身的程式設計技巧叫做遞迴。例如區域的省市縣聯動,中,通過查詢省的id,查處這個省下邊的所有市以及市下邊的縣等操作,就可以通過遞迴演算法來查詢 我使用的框架是ssm,主要是在service層做判斷 private listgetregionlist string id ...
遞迴查詢與樹形結構
關係數型據庫 如oracle 的資訊通常儲存在乙個或多個表中。為表示現實世界中的有多重級聯關係的概念,通常我們會把這些物件儲存於同一張表,並通過一組字段 field 表達它們之間的隸屬關係。譬如常見的部門資訊 tb dept dept id,dept name,parent id 名稱含義 dept...