SQLSERVER的遞迴查詢

2022-08-31 03:51:09 字數 1488 閱讀 4612

專案中有使用者組表usergroup如下:

其中pid表示當前組的上級組

表資料如下:

現在想查詢出頂級組[沒有上級組叫頂級組]a1組的所有子孫組id,sql如下:

[sql]  www.2cto.com 

--查詢子節點 

with  

rtd1 as( 

select id ,pid from usergroup

), rtd2 as( 

select * from rtd1 where id=6 

union all 

select rtd1.* from rtd2 inner join rtd1  

on rtd2.id=rtd1.pid 

) select * from rtd2 

www.2cto.com 

查詢結果如下:

id          pid

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

6           null

17          6

18          6

20          6

21          20

22          20

23          20

24          20

29          20

25          23

26          23

28          26

27          25

(13 行受影響)

現在想查詢出a1-b3-c3-d2組的所有上級組id,sql如下:

[sql]

--查詢父節點 

with  

rtu1 as( 

select id ,pid from usergroup 

), rtu2 as( 

select * from rtu1 where id=26 

union all 

select rtu1.* from rtu2 inner join rtu1  

--on myt2.id=myt.pid 

on rtu2.pid=rtu1.id 

)    www.2cto.com 

select * from rtu2 

查詢結果如下:

id          pid

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

26          23

23          20

20          6

6           null

(4 行受影響)

SQLServer 遞迴查詢

感謝文章遞迴查詢,正好趁此機會梳理一下資料庫的遞迴查詢 公用表表示式 cte 可以認為是在單個 select insert update delete 或 create view 語句的執行範圍內定義的臨時結果集。公用表表示式可以包括對自身的引用,這種表示式稱為遞迴公用表表示式。with expre...

sqlserver 遞迴查詢

有如下資料表 假如我們要查詢id為003的資料的所有子節點我們可以使用cte 遞迴查詢完成.sql view plain copy print?if object id tb n is notnull drop table tb create table tb id varchar 3 pid va...

sql server遞迴查詢

1 既然要談到sql,資料庫表是必須的 2 資料結構 3 獲取某個節點的所有子節點 傳統的寫法 sql2000 很麻煩,暫且就不寫了 來看看cte的寫法 create proc sp gettreebyid treeid int asbegin with ctetree as select from...