sql server利用cte遞迴查詢

2021-09-26 20:08:08 字數 2541 閱讀 8640

with cte(id,name,parent_id) as 

( select id,name,parent_id from sc_district where name='巴中市'

union all

select sd.id,sd.name,sd.parent_id from sc_district sd ,cte c where c.id = sd.parent_id

)select * from cte

result:

id name parent_id

2 巴中市 1

4 巴州區 2

5 通江縣 2

6 平昌縣 2

13 大寨鄉 6

14 響灘鎮 6

15 龍崗鎮 6

16 白衣鎮 6

with cte(id,name,parent_id,lev) as

( select id,name,parent_id,1 from sc_district where name='達州市'

union all

select sd.id,sd.name,sd.parent_id,c.lev+1 from sc_district sd,cte c where c.id=sd.parent_id

)select * from cte

result:

id name parent_id lev

3 達州市 1 1

7 通川區 3 2

8 宣漢縣 3 2

9 塔河鄉 8 3

10 三河鄉 8 3

11 胡家鎮 8 3

12 南壩鎮 8 3

with cte(id,name,parent_id,rootid,rootname) as

( select id,name,parent_id,id rootid,name rootname from sc_district where name='達州市'

union all

select sd.id,sd.name,sd.parent_id,cte.rootid,cte.rootname from sc_district sd,cte where sd.parent_id=cte.id

)select * from cte

result:

id name parent_id rootid rootname

3 達州市 1 3 達州市

7 通川區 3 3 達州市

8 宣漢縣 3 3 達州市

9 塔河鄉 8 3 達州市

10 三河鄉 8 3 達州市

11 胡家鎮 8 3 達州市

12 南壩鎮 8 3 達州市

with cte(id,name,pathname) as

( select id,name,cast(name as nvarchar) from sc_district where name='達州市'

union all

select sd.id,sd.name,cast(cte.pathname+'_'+sd.name as nvarchar) from sc_district sd,cte where sd.parent_id=cte.id

)select * from cte

with cte(id,name,pathname) as

( select id,name,convert(nvarchar,name) from sc_district where name='達州市'

union all

select sd.id,sd.name,convert(nvarchar,cte.pathname+'_'+sd.name) from sc_district sd,cte where sd.parent_id=cte.id

)select * from cte

result:

id name pathname

3 達州市 達州市

7 通川區 達州市_通川區

8 宣漢縣 達州市_宣漢縣

9 塔河鄉 達州市_宣漢縣_塔河鄉

10 三河鄉 達州市_宣漢縣_三河鄉

11 胡家鎮 達州市_宣漢縣_胡家鎮

12 南壩鎮 達州市_宣漢縣_南壩鎮

Sqlserver普通的CTE遞迴示例

建立表 declare t table id int pid int name varchar 6 insert into t select 1,0,上衣 union all select 2,0,鞋子 union all select 3,0,褲子 union all select 4,1,毛衣 ...

Sql Server 使用CTE實現遞迴查詢

遞迴cte是sql server 2005中重要的增強之一。一般我們在處理樹,圖和層次結構的問題時需要用到遞迴查詢。cte的語法如下 1with cte as2 3select empid,reportto,fname from employ where empid 1 4union all5 se...

sqlserver的CTE實現遞迴查詢

遞迴查詢 ifobject id digui u is notnull drop table digui create table digui id varchar 50 parentid varchar 50 insert into dbo.digui id,parentid select 第三層...