SQL Server中的父子关系

时间:2013-09-21 15:42:17

标签: sql sql-server tsql parent-child

我有一个具有这种结构的表:

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 个答案:

答案 0 :(得分: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