有关自连接的查询问题(在线等。。。)
如题,表如下:
id(int) name(nvarchar) parent_id(int)
1 pp1_1 0
2 pp2_1 0
3 pp3_2 1
4 pp4_2 2
5 pp5_3 3
6 pp6_4 5
现在需要一个存储过程,接收id为参数(比如输入6),结果集中要包含id为
6这条记录和他的parent_id,parent_id要一直到1(根)
例如:输入6
结果中包含 6 5 3 1
不知道我说清楚没有,请高手帮忙~在线等
------解决方案--------------------Create proc getY(@id int)
as
declare @a table(id int, name nvarchar(30), parent_id int)
insert @a select 1 , 'pp1_1 ', 0
union all select 2 , 'pp2_1 ', 0
union all select 3 , 'pp3_2 ', 1
union all select 4 , 'pp4_2 ', 2
union all select 5 , 'pp5_3 ', 3
union all select 6 , 'pp6_4 ', 5
if object_id( 'tab ') is not null
drop table tab
declare @s varchar(1000)
declare @v varchar(1000)
declare @I int
declare @L int
set @l=0
set @I=@id
set @s= 'Create table tab( '
set @v= 'Insert into tab select '
while exists(select 1 from @a where id=@id)
begin
select @s=@s+ 'a '+ltrim(@l)+ ' int, '
select @v=@v+ltrim(@id)+ ', '
select @id=parent_id from @a where id=@id
set @l=@l+1
end
if @l=0
begin
select '无 ' as '无 '
return
end
select @s=left(@s,len(@s)-1)+ ') '
exec(@s)
select @v=left(@v,len(@v)-1)
exec(@v)
select * from tab
=====================
getY 6
------解决方案--------------------CREATE PROCEDURE [getid]
@id int
AS
while @id <> 0
begin
select id from table1 id = @id
select @id = parent_id from id = @id
end
GO