这是我在 PostgreSQL 中遇到的一个问题的简化版本。
我有以下表格 A:
[ ID INTEGER | VALUE NUMERIC(10,2) | PARENT INTEGER ]
其中 'PARENT' 是一个指向列 ID 的自引用外键。
表格定义如下:
CREATE TABLE A(ID INTEGER IDENTITY, VALUE NUMERIC(10,2), PARENT INTEGER)
ALTER TABLE A ADD CONSTRAINT FK FOREIGN KEY (PARENT) REFERENCES A(ID)
这个简单的表格可以定义任意深度的树形数据结构。现在我需要编写一条 SQL 语句(我不想使用服务器端 PL-SQL),以报告每个节点下“悬挂”子树的总值。例如,对于以下表格:
| ID | VALUE | PARENT |
-------------------------
| 1 | NULL | NULL |
| 2 | 3.50 | 1 |
| 3 | NULL | NULL |
| 4 | NULL | 3 |
| 5 | 1.50 | 4 |
| 6 | 2.20 | 4 |
我应该得到以下结果集:
| ID | Total-Value-of-Subtree |
| 1 | 3.50 |
| 2 | 3.50 |
| 3 | 3.70 |
| 4 | 3.70 |
| 5 | 1.50 |
| 6 | 2.20 |
为简单起见,您可以假设只有叶节点具有值,在VALUE列中,非叶节点始终具有NULL值。是否有一种方法可以在SQL中实现这一点,甚至利用PostgreSQL特定的扩展功能?