有关自连接的查询问题(在线等。。。)

Batista 2007-02-01 02:54:48
如题,表如下:
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
不知道我说清楚没有,请高手帮忙~在线等
...全文
299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Batista 2007-02-01
  • 打赏
  • 举报
回复
学习ing~,谢过了!
chuifengde 2007-02-01
  • 打赏
  • 举报
回复
根据id判断parent_id,用循环得到动态语句来生成表
Batista 2007-02-01
  • 打赏
  • 举报
回复
鸟儿,可以简单讲解一下吗?
Batista 2007-02-01
  • 打赏
  • 举报
回复
谢谢各位 揭帖了~
w75251455 2007-02-01
  • 打赏
  • 举报
回复
例如:输入6
结果中包含 6 5 3 1
---是4呢
smart_zcg 2007-02-01
  • 打赏
  • 举报
回复
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
Batista 2007-02-01
  • 打赏
  • 举报
回复
稍等~
chuifengde 2007-02-01
  • 打赏
  • 举报
回复
getY 4
w75251455 2007-02-01
  • 打赏
  • 举报
回复
是4呢?
chuifengde 2007-02-01
  • 打赏
  • 举报
回复
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

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧