问题描述
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