在 Postgres 中查找树的根节点
Finding the root node of a tree in Postgress
我正在使用 PostgreSQL,我在 table 中有这样的数据。
id parent_id
1 NULL
2 1
3 2
4 NULL
5 4
我想得到以下结果。
id. root_id
1 NULL
2 1
3 1
4 NULL
5 4
也就是说,对于每个 id,我都想向上添加父节点,直到找到一个没有父节点的父节点 - 可以说是最终祖先。
非常感谢一些 SQL-fu 解决了这个问题。
谢谢!
你应该从根开始,让树走向叶子:
with recursive my_tree as (
select id, parent_id, id as root
from my_table
where parent_id is null
union all
select m.id, m.parent_id, t.root
from my_table m
join my_tree t on t.id = m.parent_id
)
select id, root
from my_tree
order by id;
注意根据定义(没有父节点的节点是根),节点1的根是1,不是null。
中测试
我正在使用 PostgreSQL,我在 table 中有这样的数据。
id parent_id
1 NULL
2 1
3 2
4 NULL
5 4
我想得到以下结果。
id. root_id
1 NULL
2 1
3 1
4 NULL
5 4
也就是说,对于每个 id,我都想向上添加父节点,直到找到一个没有父节点的父节点 - 可以说是最终祖先。
非常感谢一些 SQL-fu 解决了这个问题。
谢谢!
你应该从根开始,让树走向叶子:
with recursive my_tree as (
select id, parent_id, id as root
from my_table
where parent_id is null
union all
select m.id, m.parent_id, t.root
from my_table m
join my_tree t on t.id = m.parent_id
)
select id, root
from my_tree
order by id;
注意根据定义(没有父节点的节点是根),节点1的根是1,不是null。
中测试