id root name
1 0 a
2 1 a-1
3 2 a-2
4 0 b
5 4 b-1这种结构的库,就是像那种目录树无限级的,现要取比如id为1开始递归的所有记录,就是把id等于1、2、3的记录全取出来,SQL该如何写?
1 0 a
2 1 a-1
3 2 a-2
4 0 b
5 4 b-1这种结构的库,就是像那种目录树无限级的,现要取比如id为1开始递归的所有记录,就是把id等于1、2、3的记录全取出来,SQL该如何写?
(
id int ,
root int,
name varchar(5)
)insert into tb
select 1,0,'a' union all
select 2,1,'a-1' union all
select 3,2,'a-2' union all
select 4,0,'b' union all
select 5,4,'b-1'
godeclare @id int
set @id=1
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM tb
WHERE id=@id
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM tb a,@t_Level b
WHERE a.root=b.ID
AND b.Level=@Level-1
END
--执行
SELECT a.*
FROM tb a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
--结果
(0 行受影响)
id root name
----------- ----------- -----
1 0 a
2 1 a-1
3 2 a-2(3 行受影响)