有如下資料表
假如我們要查詢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
varchar
(3) ,
name
varchar
(10));
insert
into
tb values
('001'
, null
, '廣東省'
);
insert
into
tb values
('002'
, '001'
, '廣州市'
);
insert
into
tb values
('003'
, '001'
, '深圳市'
) ;
insert
into
tb values
('004'
, '002'
, '天河區'
) ;
insert
into
tb values
('005'
, '003'
, '羅湖區'
);
insert
into
tb values
('006'
, '003'
, '福田區'
) ;
insert
into
tb values
('007'
, '003'
, '寶安區'
) ;
insert
into
tb values
('008'
, '007'
, '西鄉鎮'
) ;
insert
into
tb values
('009'
, '007'
, '龍華鎮'
);
insert
into
tb values
('010'
, '007'
, '松崗鎮'
);
select
* from
tb;
with
cte
as(
select
a.id,a.
name
,a.pid
from
tb a
where
id='003'
union
allselect
k.id,k.
name
,k.pid
from
tb k
inner
join
cte c
onc.id = k.pid
)select
* from
cte
查詢結果如下:
003 深圳市 001
005 羅湖區 003
006 福田區 003
007 寶安區 003
008 西鄉鎮 007
009 龍華鎮 007
010 松崗鎮 007
SQLServer 遞迴查詢
感謝文章遞迴查詢,正好趁此機會梳理一下資料庫的遞迴查詢 公用表表示式 cte 可以認為是在單個 select insert update delete 或 create view 語句的執行範圍內定義的臨時結果集。公用表表示式可以包括對自身的引用,這種表示式稱為遞迴公用表表示式。with expre...
sql server遞迴查詢
1 既然要談到sql,資料庫表是必須的 2 資料結構 3 獲取某個節點的所有子節點 傳統的寫法 sql2000 很麻煩,暫且就不寫了 來看看cte的寫法 create proc sp gettreebyid treeid int asbegin with ctetree as select from...
sqlserver 遞迴查詢
構建遞迴結構的表 資料是虛構的 drop table t create table t id int,name varchar 6 pid int insert into t select 1,安徽 0 union all select 2,安慶 1 union all select 3,安慶市 2...