MS SQL Server:与孩子的所有父母一起查看

时间:2017-08-16 10:53:41

标签: sql sql-server

我有以下映射表,其中包含父/子ID对:

parent_id | child_id
   3      |     5
   5      |     4
   4      |     9
   6      |     7
   7      |     8

我需要为此表创建一个视图,该视图将列出给定子项的所有父项。使用上面的示例,生成的视图应如下所示:

parent_id | child_id
   3      |     5
   3      |     4
   5      |     4
   3      |     9
   5      |     9
   4      |     9
   6      |     7
   6      |     8
   7      |     8

视图对于某个id的每个父级(直接或间接)都有一行,父级越多,行越多。可以假设此表中没有循环。

我不知道如何处理这个问题,因为我已经研究了递归选择和循环,但我不确定如何将它们合并到视图中。

1 个答案:

答案 0 :(得分:1)

您可以使用递归CTE执行此操作:

with cte as (
      select t.parent_id, t.child_id
      from t
      where t.child_id = @child  -- not needed if you want all
      union all
      select t.parent_id, t.child_id
      from cte join
           t
           on t.child_id = cte.parent_id
    )
select *
from cte;