子结点与父结点
问大家一个查询问题:
id address pid
0 A O
1 a 0
2 aa 1
3 aaa 2
..........
说明:
id为主键,pid为父结点
要求结果为:
当我知道ID=3时,查询出
address
A a aa aaa
要如何弄?
问题点数:30、回复次数:5Top
1 楼caobin518(linlin)回复于 2006-03-07 09:23:49 得分 0
相当于:
id address pid
0 A O ...........为省份
1 a 0 ...........为市
2 aa 1 ...........为县
3 aaa 2 ...........为乡
要求结果为:
当我知道乡名为:“aaa”时,可以查询出它的详细地址(乡不存在重名)为:
AaaaaaaTop
2 楼lsqkeke(可可)回复于 2006-03-07 09:35:56 得分 0
id address pid
0 A O ...........为省份
你省份的PID是数字 0 还是字符'o'?Top
3 楼lsqkeke(可可)回复于 2006-03-07 09:40:09 得分 20
你省份的表字段的pid 如果是null 就好处理多了
declare @t table(id int, address varchar(10), pid int)
insert @T
select 0, 'A', null union all
select 1, 'a', 0 union all
select 2, 'aa', 1 union all
select 3, 'aaa', 2
declare @var varchar(100),@w varchar(15),@id int,@vid int
set @var=''
select @w=address,@id=pid from @t where id=3
while(@@rowcount<>0 )
begin
set @var=@w+@var
set @vid=@id
select @w=address,@id=pid from @t where id=@vid
end
select @varTop
4 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2006-03-07 09:47:16 得分 10
create table tb(id int identity(0,1),address varchar(10),pid int)
insert tb
select 'A',null union all
select 'a', 0 union all
select 'aa', 1 union all
select 'aaa', 2
if exists(select 1 from dbo.sysobjects where id=object_id(N'[dbo].f_getFullAddress') and xtype in (N'FN',N'IF',N'TF'))
drop function f_getFullAddress
go
create function f_getFullAddress(@id int)
returns @re table(address varchar(1000))
as
begin
declare @t table(id int,address varchar(10),[level] int,pid int)
declare @level int,@s varchar(1000)
select @level=100,@s=''
insert into @t select id,address,@level,pid from tb where id=@id
while @@rowcount>0
begin
set @level=@level-1
insert into @t
select b.id,b.address,@level,b.pid from tb b,@t t where b.id=t.pid and t.[level]=@level+1
end
select @s=@s+' '+address from @t order by [level]
insert @re select stuff(@s,1,1,'')
return
end
go
select * from dbo.f_getfulladdress(3)
--结果
/*
address
--------------------
A a aa aaa
*/Top
5 楼caobin518(linlin)回复于 2006-03-07 10:27:58 得分 0
谢谢二位Top




