SQL查詢根節點

2022-02-06 17:32:48 字數 2214 閱讀 9224

/*

地點:廣東深圳

*/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' , '

松崗鎮')go

--查詢指定節點及其所有父節點的函式

create function f_pid(@id varchar(

3)) returns @t_level table(id varchar(3

))as

begin

insert into @t_level

select

@id

select @id = pid from tb where id = @id and pid is not null

while @@rowcount > 0

begin

insert into @t_level

select @id select @id = pid from tb where id = @id and pid is not null

end

return

endgo

--呼叫函式查詢002(廣州市)及其所有父節點

select a.* from tb a , f_pid('

002') b where a.id =b.id order by a.id

/*id pid name

---- ---- ----------

001 null 廣東省

002 001 廣州市

(所影響的行數為 2 行)

*/--呼叫函式查詢003(深圳市)及其所有父節點

select a.* from tb a , f_pid('

003') b where a.id =b.id order by a.id

/*id pid name

---- ---- ----------

001 null 廣東省

003 001 深圳市

(所影響的行數為 2 行)

*/--呼叫函式查詢008(西鄉鎮)及其所有父節點

select a.* from tb a , f_pid('

008') b where a.id =b.id order by a.id

/*id pid name

---- ---- ----------

001 null 廣東省

003 001 深圳市

007 003 寶安區

008 007 西鄉鎮

(所影響的行數為 4 行)

*/drop table tb

drop function f_pid

SQL應用之查詢根節點

mssql提供了cte遞迴取資料的方法,但是沒有直接提供乙個給定任意節點查詢其根節點的方法 也是ms sql 2008之後的版本有我不知道 此外,如果資料庫提供的資料出現死循時,如果沒有相應的檢測機制,必然導致資料庫伺服器資源耗盡。因此查詢根節點的sql片斷 或儲存過程 也是相當有用的。declar...

oracle 樹狀查詢,查詢根節點

1 第一種方法 sql select to number substr path,2,instr path,2 2 root id,id 2 from 3 4 select sys connect by path id,path,id 5 from test 6 where rownum 10 7 ...

sql遞迴查詢父節點的例子

由於專案要分地區,而且是自己定義的 所有建立乙個分組表 create table group info group id bigint 10 not null auto increment comment 分組id content varchar 2000 default null comment ...