我有一个包含层次结构(ltree)的postgres表:
| hierarchy |
|-----------|
| A |
| A.X |
| A.X.Y. |
| A.X.Y.Z |
| A.B |
| A.B.C |
| A.B.C.D |
| A.B.C.D.E |
和结果表:
| marker | tier | hierarchy |
|:------:|:----:|:---------:|
| 1 | 1 | A |
| 1 | NULL | A.X.Y |
| 1 | 2 | A.X |
| 1 | NULL | A.B.C.D.E |
| 1 | 4 | A.B.C |
| 1 | NULL | A |
| 2 | NULL | A.B |
| 2 | NULL | A.B.C |
我想创建一个视图,它将层列中的NULL值替换为最接近的祖先的非NULL层(即。e.父层-如果父层为空,则查看祖父母的层等,如果必要的话,一直回到树的根)。
此示例的输出视图如下所示:
| marker | tier | hierarchy |
|:------:|:----:|:---------:|
| 1 | 1 | A |
| 1 | 2 | A.X.Y |
| 1 | 2 | A.X |
| 1 | 4 | A.B.C.D.E |
| 1 | 4 | A.B |
| 1 | 1 | A |
| 2 | NULL | A.B |
| 2 | NULL | A.B.C |
你能帮忙吗?
1条答案
按热度按时间5q4ezhmt1#
这看起来像是self-
LEFT JOIN
的工作,但连接条件并不那么明确-它实际上需要从多个可能的祖先中选择“最近的”。用子查询更容易表达:demo