專案中有使用者組表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...