/*地點:廣東深圳
*/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 ...