SQL Server中的父子关系

3

我有一个具有以下结构的表:

ParentProjectID  ChildProjectID
------------------------------    
     101             102
     102             103
     103             104
     201             202
     202             203

让我解释一下这种情况,当我们更新一个项目时,我们将其视为一个新项目,并将其输入到其父项目中。
例如,102是其父项目102的子项目,103的父项目是102,依此类推。
现在,我的问题是找出祖父母、父母和子女。
就像上面的例子中,101是102、103和104的祖父母,102是103和104的父母。
因此,我希望我的结果如下:
(如果我将101作为ParentProjectID的参数传递)
ParentProjectID  ChildProjectID
      101             102
      101             103
      101             104

非常感谢您的帮助。

1个回答

2

您可以使用递归公共表达式:

create procedure usp_Descendants
(
  @ParentProjectID int
)
as
begin
    ;with cte as (
         select
             T.ChildProjectID
         from Table1 as T
         where T.ParentProjectID = @ParentProjectID
         union all
         select
             T.ChildProjectID
         from cte as c
             inner join Table1 as T on T.ParentProjectID = c.ChildProjectID
    )
    select
        @ParentProjectID, c.ChildProjectID
    from cte as c
end

exec usp_Descendants @ParentProjectID = 101;
-----------
101     102
101     103
101     104

exec usp_Descendants @ParentProjectID = 101;
-----------
102     103
102     104

sql fiddle demo


@DeepakSharma 没问题,递归CTE是非常强大的功能。 - Roman Pekar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接