求助:数据的树型查找方法

NetVan 2007-11-10 05:28:43
数据结构是这样的

selfid 编号
name 姓名
belong 上级编号(0为顶级)


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

给一个思路,谢谢!
...全文
90 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2007-11-10
  • 打赏
  • 举报
回复

create table tdd(selfid varchar(10),name varchar(10),belong varchar(10))
insert into tdd select '0001','wsp','0'
insert into tdd select '0002','pp','0001'
insert into tdd select '0003','ww','0002'
insert into tdd select '0004','ss','0003'

create proc ssss
@name varchar(10)
as
select a.name from tdd a,tdd b where a.belong=b.selfid and b.name=@name

exec ssss 'pp'
中国风 2007-11-10
  • 打赏
  • 举报
回复
关于递归的列子:
http://blog.csdn.net/roy_88/archive/2006/12/24/1458449.aspx
-狙击手- 2007-11-10
  • 打赏
  • 举报
回复
我就说没这么简单啦,找到所有的下属吧,直接和间接的

CREATE TABLE BOM(PID INT,ID INT)
INSERT INTO BOM SELECT 801,101
INSERT INTO BOM SELECT 801,102
INSERT INTO BOM SELECT 801,103
INSERT INTO BOM SELECT 801,601
INSERT INTO BOM SELECT 601,101
INSERT INTO BOM SELECT 601,105
INSERT INTO BOM SELECT 601,501
INSERT INTO BOM SELECT 501,106
INSERT INTO BOM SELECT 501,121
GO

CREATE FUNCTION F_GETROOT(@PID INT)
RETURNS INT
AS
BEGIN
DECLARE @ID INT
WHILE EXISTS(SELECT 1 FROM BOM WHERE ID=@PID)
BEGIN
SET @ID=@PID
SELECT @PID=PID FROM BOM WHERE ID=@ID
END
RETURN @PID
END
GO

SELECT PID=DBO.F_GETROOT(PID),ID FROM BOM
GO

/*
PID ID
----------- -----------
801 101
801 102
801 103
801 601
801 101
801 105
801 501
801 106
801 121
*/


DROP FUNCTION F_GETROOT
DROP TABLE BOM
GO
NetVan 2007-11-10
  • 打赏
  • 举报
回复
belogn=selfid 这样只能判断,第一层下级,如果第二层就不行了
-狙击手- 2007-11-10
  • 打赏
  • 举报
回复
只要有一个? 没多个下属呀

select b.*
from T a
join T b
on b.belong=a.selfid and a.name= 'NAME '
weifengxian2 2007-11-10
  • 打赏
  • 举报
回复
select b.* from T a,T b where b.belong=a.selfid and a.name='NAME';
是不是这个意思

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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