遞迴查詢樹形結構的SQL

2022-07-07 16:00:15 字數 2213 閱讀 8136

一.在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...