【发布时间】:2010-10-11 21:49:17
【问题描述】:
我的数据自然适合树形。因此,我有一个简单的 SQL 表来存储数据:{id, parentid, data1, ..., dataN}
我希望能够“放大”数据并生成一份总结当前分支下方数据的报告。 也就是说,当站在根目录时,我想要所有数据的总和。当我沿着树的某个分支向下移动时,我只想获得仅为该节点及其子节点找到的数据的总和。
如何在 SQL 中编写这样的查询?
提前致谢!
/约翰
【问题讨论】:
我的数据自然适合树形。因此,我有一个简单的 SQL 表来存储数据:{id, parentid, data1, ..., dataN}
我希望能够“放大”数据并生成一份总结当前分支下方数据的报告。 也就是说,当站在根目录时,我想要所有数据的总和。当我沿着树的某个分支向下移动时,我只想获得仅为该节点及其子节点找到的数据的总和。
如何在 SQL 中编写这样的查询?
提前致谢!
/约翰
【问题讨论】:
由于sqlite 不支持CONNECT BY,除非您对数据使用nested sets or materialized paths,否则您将无法在单个查询中执行此计算。
或者,以“艰难的方式”执行此操作并递归遍历您的树,从感兴趣的父节点开始对每个子节点进行一次查询。
另见:
【讨论】:
Vlad 关于嵌套集的参考看起来不错。如果您想要更详细地涵盖树和层次结构的内容,还可以查看Joe Celko's book。
“ID、ParentID”邻接列表模型实际上是一种“旧时”查看关系数据库模型中层次结构的方式。
【讨论】: