SQL - 多级自连接

SQL - Multi level self join

我有一个 table 具有这样的父子关系 - Isfinal 列表明它是该级别的最终元素

ID    name    ParentId    Isfinal
1     abc       0           No
2     acd       1           No
3     ads       1           No
4     xyz       2           No
5     xxy       2           Yes
6     plm       3           No
7     ytr       4           Yes
8     lks       6           Yes

我正在尝试编写一个动态查询,它将给出该 ID 的子元素。

例如

如果我 select 2 那么它应该给出结果 -

ID    name    ParentId    Isfinal
4     xyz       2           No
5     xxy       2           Yes
7     ytr       4           Yes

是否可以自行加入?

使用递归 CTE,你可以解决这个问题。

DECLARE @TABLE  TABLE
(   ID          int
    ,name       nvarchar(200)
    ,ParentId   int
    ,Isfinal    nvarchar(20)
)

INSERT INTO @TABLE
VALUES (1,'abc',0,'No'),(2,'acd',1,'No'),(3,'ads',1,'No'),
        (4,'xyz',2,'No'),(5,'xxy',2,'Yes'),(6,'plm',3,'No'),
        (7,'ytr',4,'Yes'),(8,'lks',6,'Yes')

DECLARE @ID INT = 2

;WITH CTE
AS
(
    SELECT  ID,name,ParentId,Isfinal
    FROM    @TABLE
    WHERE   ParentId    =   @ID

    UNION ALL

    SELECT  T.ID,T.name,T.ParentId,T.Isfinal
    FROM    @TABLE  T
        INNER JOIN  CTE C   ON  C.ID    =   T.ParentId
)

SELECT * FROM CTE