以下是我正在查看的数据示例:
表:
id | name | parent_id
_______|____________|______________
1 |Root | null
2 |Parent #2 | 1
3 |Parent #3 | 1
4 |Parent #4 | 2
5 |Child #5 | 2
6 |Child #6 | 2
7 |Child #7 | 3
8 |Child #8 | 3
9 |Child #9 | 3
使用递归查询,我可以从Parent开始,并获取所有关联的子项。
我的问题是,如何从孩子开始,让所有相关的父母,祖父母等等,直到根。
所以,鉴于Child#9,我想要一个返回以下内容的查询:
id | name | parent_id
_______|____________|______________
1 |Root | 0
3 |Parent #3 | 1
9 |Child #9 | 3
非常感谢任何帮助。
答案 0 :(得分:12)
像这样:
with recursive whosYourDaddy as (
--start with the "anchor" row
select
*
from foo
where
id = 9 --parameterize me
union all
select
foo.*
from foo
join whosYourDaddy on whosYourDaddy.parent_id = foo.id
)
select
*
from whosYourDaddy
order by
id;
结果:
id name parent_id
-----------------------
1 Root (null)
3 Parent 3 1
9 Child 9 3
代码: