码迷,mamicode.com
首页 > 数据库 > 详细

SQL查询根节点

时间:2015-09-01 16:40:23      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

/*
标题:查询指定节点及其所有父节点的函数
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 
时间:2008-05-12
地点:广东深圳
*/

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
end
go

--调用函数查询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

http://bbs.csdn.net/topics/300112071

SQL查询根节点

标签:

原文地址:http://www.cnblogs.com/fuqiang88/p/4775861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!