我有以下映射表,其中包含父/子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的每个父级(直接或间接)都有一行,父级越多,行越多。可以假设此表中没有循环。
我不知道如何处理这个问题,因为我已经研究了递归选择和循环,但我不确定如何将它们合并到视图中。
答案 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;