我有一个像这样的层次结构的表:
Create Table tbl1
(
AccountID NVARCHAR(100),
ID int,
ParentID int
);
INSERT INTO tbl1
VALUES ('11', 1, Null), ('12', 2, Null), ('13', 3, Null),
('11/11', 4, 1), ('11/12', 5, 1), ('11/111', 6, 1),
('11/11/001', 7, 4), ('11/11/002', 8, 4), ('12/111', 9, 2),
('12/112', 10, 2);
如何从树形结构中的tbl1获取某些节点的所有子节点,根据另一个表(FilteringTbl
),如下所示:
AccountID
---------
11/11
12
13
换句话说,我想创建一个SQL查询,以从SQL Server 2008中的第一个表(tbl1)获取节点11/11和12和13的所有子节点。 主表有超过5000条记录。 (tbl1 5400记录和过滤1500条记录)
请帮帮我。感谢。
答案 0 :(得分:1)
;with C
as (
select AccountID,
ID,
ParentID,
0 as [level]
from tbl1
where ID IN (SELECT ID FROM Filteringtbl)
union all
select I.AccountID,
I.ID,
I.ParentID,
C.[level] + 1 as [level]
from tbl1 as I
inner join C on
C.ID = I.ParentID
)
select *
from C