【发布时间】:2018-12-28 07:46:49
【问题描述】:
+----+----------+-------+
| Id | ParentId | Value |
+----+----------+-------+
| 1 | 0 | X |
| 2 | 1 | X |
| 3 | 1 | X |
| 4 | 2 | X |
+----+----------+-------+
我有一个这样的数据库,限制是:
- 一行最多是另外 1 行的子行
- 一行可以有很多子行
- 可以有更多的嵌套级别
我想要做的查询是将所有行链接到 id=1 的行。所以我需要返回正确层次结构中的所有行。 我想知道是否有一个查询可以帮助我实现这一目标?我知道使用循环是可能的,但它会减慢很多。 如果您对构建此结构的更好方法有任何建议,请告诉我。我不限于修改整个数据库。
【问题讨论】:
-
您是否需要经常更新数据层次结构?如果没有,您可能需要考虑嵌套集合模型。
-
编写一个函数 getRootId(Id):当 Id 的 ParentId = 0(或任何你的基本情况)然后是 Id,否则 getRootId(Id's ParentId)。如果您将结果写入列,则此函数可以通过 RootId 已找到 短路进行高度优化。按顺序处理。这甚至可以内置到表触发器中。结果将是一个新列 rootId,它的 Id 始终位于任何记录层次结构的最底部。
-
标记您的数据库。 SQL 只是一种语言,每个 DB 支持的函数和语法都不一样。
标签: sql hierarchical-data recursive-query