这是我在 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 特定的扩展?