我有一个具有这种结构的表:
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
任何帮助将不胜感激。
答案 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 强>