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 第三層...