我有一张如下的table:
ID PARENT_ID VALUE_ID
1 NULL 100
2 1 NULL
3 2 200
4 3 NULL
5 1 300
6 2 NULL
7 6 400
8 7 500
我希望能够获取每个id及其对应的值,如果一行的值为null,它将“继承”层次结构中第一个父级的值,该父级的值为notnull。这就是查询结果:
ID VALUE_ID
1 100
2 100 // -> inherits the value from PARENT_ID = 1;
3 200
4 200 // -> inherits the value from PARENT_ID = 3;
5 300
6 100 // -> inherits the value from ID = 1, because the PARENT_ID = 2 also has VALUE_ID as NULL, so it goes deeper in the hierarchy;
7 400
8 500
只有一个递归或层次查询可以完成这样的事情吗?或者不需要程序就可以完成?使用cte,还是connect by子句?
2条答案
按热度按时间kr98yfug1#
您可以为此使用递归cte:
这是一把小提琴。
mf98qq942#
可以使用相关的层次查询和
CONNECT_BY_ISLEAF
只返回一行:因此,对于您的测试数据:
这将输出:
db<>在这里摆弄