概述
有一个表名为:T
结构如下:
id ---int
parentid---int 上层的父节点
sname--varchar(50)
如有以下数据:
id parentid sname
1 -1 根节点
2 1 节点1
3 1 节点2
4 2 节点3
5 2 节点4
6 3 节点5
7 3 节点6
7 6 节点7
假如:我要得到某个节点下所有的最底层的节点数据怎么实现:
如:我要得到id=3 的所有最底层的数据是:
id parentid sname
7 3 节点6
7 6 节点
create table tb(id int, parentid int, sname varchar(10))
insert into tb values(1 , -1 , '根节点')
insert into tb values(2 , 1 , '节点1')
insert into tb values(3 , 1 , '节点2')
insert into tb values(4 , 2 , '节点3')
insert into tb values(5 , 2 , '节点4')
insert into tb values(6 , 3 , '节点5')
insert into tb values(7 , 3 , '节点6')
insert into tb values(7 , 6 , '节点7')
go
--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID int) RETURNS @t_Level TABLE(ID int,Level int)
AS
BEGIN
DECLARE @Level int
SET @Level=1
INSERT @t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
FROM tb a,@t_Level b
WHERE a.parentid=b.ID
AND b.Level=@Level-1
END
RETURN
END
GO
SELECT distinct a.* FROM tb a,f_Cid(3) b WHERE a.ID=b.ID and a.id not in(select parentid from tb)
drop table tb
drop function dbo.f_cid
/*
id parentid sname
----------- ----------- ----------
7 3 节点6
7 6 节点7
(所影响的行数为 2 行)
*/
-- sql 2005 可以直接查询
;WITH
TREE AS(
SELECT * FROM TWHERE parentid = 3 -- 要查询的父 id
UNION ALL
SELECT T * FROM T, TREE
WHERE T.parentid = TREE.id
)
SELECT * FROM TREE
最后
以上就是机智饼干为你收集整理的遍历树--得到某个节点下所有的最底层的节点数据的全部内容,希望文章能够帮你解决遍历树--得到某个节点下所有的最底层的节点数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复