一个关于树的查询问题

NetVan 2007-11-10 10:31:15
数据结构是这样的
selfid 编号
name 姓名
belong 上级编号(0为顶级)

例如数据有

selfid name belogn
001 张一 0
002 张二 001
003 张三 002
004 张四 001

如何查找,下面的一个人! 提供姓名后,找出这个人 但必须这个人是他的下级

就是一个树型的结构数据,如何才能找到某个人.

万分感谢! 最好给我提供一下 asp写的代码.
...全文
54 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2007-11-11
  • 打赏
  • 举报
回复
帮你写写好了.

本来可以不用标签,但怕数据多,超过32层递规,还是用标签稳妥

CREATE TABLE tb(selfid VARCHAR(10),name VARCHAR(10),belogn VARCHAR(10))
INSERT tb SELECT '001', '张一', '0'
UNION ALL SELECT '002' , '张二' , '001'
UNION ALL SELECT '003' , '张三' , '002'
UNION ALL SELECT '004' , '张四' , '001'
GO

CREATE PROC getSon
(@name VARCHAR(10)/* --要查找的姓名*/)
AS
BEGIN
SELECT *,lvl=0 INTO # FROM tb WHERE 1=0
DECLARE @pName VARCHAR(10),@lvl INT,@sel VARCHAR(10),@be VARCHAR(10)
SET @lvl=0
myLoop:
BEGIN
SET @pName=@name
SELECT TOP 1 @lvl=@lvl+1,@name=a.name,@sel=a.selfid,@be=a.belogn FROM tb b
LEFT JOIN tb a
ON a.belogn=b.selfid
WHERE b.name=@pName
END
IF @name IS NOT NULL
BEGIN
INSERT # SELECT @sel,@name,@be,@lvl
GOTO myLoop
END
SELECT * FROM #
DROP TABLE #
END

GO
EXEC getSon '张一'
/*
002 张二 001 1
003 张三 002 2
*/
DROP TABLE tb
DROP PROC getSon

GO
msd88 2007-11-10
  • 打赏
  • 举报
回复
没看明白,是找上级?还是找下级?提供的是上级名字还是下级名字?得到几条数据?

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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