从主节点和级别节点构建层次表

问题描述

我想根据如下所示的数据构建一个子父链接

id_node main_node 级别
A9 A9 0
92 A9 1
923 A9 2
9234 A9 3

是否有一种简单的方法可以反转此表并为每一行添加父ID并获得如下内容

id_node main_node 级别
A9 A9 0 NULL
92 A9 1 A9
923 A9 2 92
9234 A9 3 923

我不想遍历每个 id,我想知道是否有像 this one 这样的方法,但有点恢复。

解决方法

您可以使用join

select t.*,tparent.id_node as parent
from t left join
     t tparent
     on tparent.main_node = t.main_node and
        tparent.level = t.level - 1;

您也可以使用lag()

select t.*,lag(id_node) over (partition by main_node order by level) as parent
from t