sqlserver 遞迴查詢

2021-08-03 23:58:11 字數 1923 閱讀 6986

有如下資料表

假如我們要查詢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...