Đây là phiên bản đơn giản hóa của vấn đề tôi đang gặp phải trong PostgreSQL.
Tôi có bảng A sau:
[ID INTEGER | SỐ GIÁ TRỊ (10,2) | LIÊN KẾT PHỤ HUYNH ]
Trong đó 'PARENT' là FK tự tham chiếu đến ID cột.
Định nghĩa bảng là:
CREATE TABLE A(ID INTEGER IDENTITY, VALUE NUMERIC(10,2), PARENT INTEGER)
ALTER TABLE A ADD CONSTRAINT FK FOREIGN KEY (PARENT) REFERENCES A(ID)
Bảng đơn giản này cho phép người ta xác định cấu trúc dữ liệu cây có độ sâu tùy ý. Bây giờ tôi cần viết một SQL (tôi không muốn sử dụng PL-SQL phía máy chủ) báo cáo cho mỗi nút, tổng giá trị của cây con "treo" dưới nó. Ví dụ, với bảng sau:
| ID | VALUE | PARENT |
-------------------------
| 1 | NULL | NULL |
| 2 | 3.50 | 1 |
| 3 | NULL | NULL |
| 4 | NULL | 3 |
| 5 | 1.50 | 4 |
| 6 | 2.20 | 4 |
Tôi sẽ nhận được tập hợp kết quả sau:
| ID | Total-Value-of-Subtree |
| 1 | 3.50 |
| 2 | 3.50 |
| 3 | 3.70 |
| 4 | 3.70 |
| 5 | 1.50 |
| 6 | 2.20 |
Nói một cách đơn giản, bạn có thể giả sử rằng chỉ các nút lá mới có giá trị, các nút không phải lá luôn có giá trị NULL trong cột GIÁ TRỊ . Có cách nào để làm điều này trong SQL, thậm chí sử dụng các phần mở rộng dành riêng cho PostgreSQL không?