sql - 从主节点和级别节点构建层次结构表
问题描述
我想从如下所示的数据构建一个子父链接:
id_node | 主节点 | 等级 |
---|---|---|
A9 | A9 | 0 |
92 | A9 | 1 |
923 | A9 | 2 |
9234 | A9 | 3 |
有没有一种简单的方法来反转这个表并为每一行添加父 id 并得到这样的东西:
id_node | 主节点 | 等级 | 父母 |
---|---|---|---|
A9 | A9 | 0 | 无效的 |
92 | A9 | 1 | A9 |
923 | A9 | 2 | 92 |
9234 | A9 | 3 | 923 |
我不是要遍历每个 id,我想知道是否有类似this的方法,但有点还原。
解决方案
您可以使用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
推荐阅读
- java - 在链接列表的末尾插入项目时遇到问题 Java 不起作用
- rust - 如何解决 Rust 在方法设计中的“使用移动值”?
- bash - 仅针对子目录中的现有目录批量删除 (rm -rf)
- java - java - 如何从Java Spring Boot中的请求标头获取不记名令牌?
- c# - 如何通过单击按钮打开“openFileDialog”?
- flutter - 如何在小部件构建颤振之前加载/填充对象?
- string - 使用 '%v' 漂亮地打印未导出的字段
- angular - 如何知道用户是否在 Angular 中使用 beforeunload 留在页面中?
- octave - 当我点击选项卡并显示他们的帮助文本时,如何让 Octave 建议我班级的方法?
- kotlin - Kotlin 可以在 if 语句中声明变量吗?