如何在树形结构中获得几个节点的所有子节点?

时间:2016-06-13 21:41:26

标签: sql-server-2008 tsql hierarchical-data

我有一个像这样的层次结构的表:

 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条记录)

请帮帮我。感谢。

1 个答案:

答案 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
相关问题