我必须在我的数据库中存储很多项目 . 每个项目都可以有子项目 . 结构看起来像一棵树:
Project
/ | \
ProjectChild1 ProjectChild2 [...] ProjectChild[n]
/ |
ProjectChildOfChild1 ProjectChildOfChild2
树的层次是未知的 . 我正在考虑创建一个这样的表:
表 Projects
:
project_ID id_unique PRIMARY_KEY
project_NAME text
project_VALUE numeric
project_PARENT id_unique
在这种情况下,列 project_PARENT
将存储父项目的id(如果存在) .
对于我的应用程序,我需要检索项目的总值,为此我需要总结每个项目子项和根项目的值 .
我知道我需要使用递归,但我不知道如何在Postgres中这样做 .
2 回答
这是@a_horse's correct answer的简化版本(在评论中与OP讨论后) .
适用于递归中任何(合理有限的)级别 .
给定project_id的总价格
要一次性获得所有项目的总成本:
同时为所有项目
SQL Fiddle(带有正确的测试用例) .
像这样的东西:
联合的第一部分需要选择要评估的项目(“子”项目) . 递归连接将向上遍历树并检索所有父项目 .