这是我在 PostgreSQL 中遇到的问题的简化版本。
我有下表A:
[ ID 整数 | 数值 数字(10,2) | 父 整数 ]
其中 'PARENT' 是对列 ID 的自引用 FK。
表定义为:
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 特定的扩展?