日期:2014-05-17  浏览次数:20555 次

一个sql问题,类似树的遍历

数据库为sql server 2000 假如有这么一个表,table1 如上所示。ID代表节点编号,parentID代表父节点编号,0代表根节点。我现在想根据一个ID求出所有子节点的ID,请问如何解决?为了理解方便我画了一个图。假如我想求ID=2 (也就是乙)的根节点的所有ID(应该为丙丁,也就是3和4),请问如何写语句?注意,不一定是二叉树。
SQL

------解决方案--------------------
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_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int) 
as 
begin 
  declare @level int 
  set @level = 1 
  insert into @t_level select @id , @level 
  while @@ROWCOUNT > 0 
  begin 
    set @level = @level + 1 
    insert into @t_level select a.id , @level 
    from tb a , @t_Level b 
    where a.pid = b.id and b.level = @level - 1 
  end 
  return 
end 
go 

--调用函数查询001(广东省)及其所有子节点