遞迴查詢SQL

2021-05-23 13:13:12 字數 1393 閱讀 4788

lz需要的修改自己為對應的,** csdn sqlserve大版主 鄒建

我轉貼並且完善一下

--測試資料

create table tb(id char(3),pid char(3),name nvarchar(10))

insert tb select '001',null ,'山東省'

union all select '002','001','煙台市'

union all select '004','002','招遠市'

union all select '003','001','青島市'

union all select '005',null ,'四會市'

union all select '006','005','清遠市'

union all select '007','006','小分市'

go--查詢指定節點及其所有子節點的函式

create function f_cid(@id char(3))

returns @t_level table(id char(3),level int)

asbegin

declare @level int

set @level=1

insert @t_level select @id,@level

while @@rowcount>0

begin

set @level=@level+1

insert @t_level select a.id,@level

from tb a,@t_level b

where a.pid=b.id

and b.level=@level-1

endreturn

endgo

--呼叫函式查詢002及其所有子節點

select a.*

from tb a,f_cid('002') b

where a.id=b.id

/*--結果

id   pid  name      

------ ------- ----------

002  001  煙台市

004  002  招遠市

如果是sql2005 也可以通過cte實現

delcare @id char(3)

select @id='002'

with tbcte as

(select a.id,1 as level

where a.pid=@id

union all

select c.id,p.level + 1

from tbcte as p

join tb as c

on c.pid = p.id

)select * from tbcte ;

SQL遞迴查詢

create table t bid int,p bid int insert into t select 1,null union all select 2,1 union all select 3,1 union all select 4,3 union all select 5,4 union...

SQL 遞迴查詢

create proc proc tree node int asbegin declare i int set i 0 set nocount on drop table res create table res node int,child int,weight int,op int inser...

sql遞迴查詢

有兩個表,a 部門表,儲存部門id 名稱 上級部門 b表 儲存部門員工表 id 姓名 部門id 現在我希望通過一條sql語句取得所有頂級部門下的員工 包含下級部門的員工 drop table dept create table dept dept id varchar 5 up id varchar...