我有下表:
myTable:
+----+----------+
| id | parentID |
+----+----------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 4 |
-----------------
我想追溯所有行,直到不再有 parentID。所以“.... WHERE id=5”会给我:
5, 4, 2, 1
我有下表:
myTable:
+----+----------+
| id | parentID |
+----+----------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 4 |
-----------------
我想追溯所有行,直到不再有 parentID。所以“.... WHERE id=5”会给我:
5, 4, 2, 1
您正在使用邻接列表模型来组织您的分层数据。这种递归操作很困难的事实实际上是该模型的一个主要缺点。
一些 DBMS,例如 SQL Server 2005、Postgres 8.4 和 Oracle 11g,支持使用带有关键字的公共表表达式的递归查询。WITH
至于 MySQL,您可能有兴趣查看以下描述替代模型(嵌套集模型)的文章,它使递归操作更容易(可能):
此外,我还建议查看上述评论中指出的 Bill Karwin 的演讲。所描述的闭包表模型是嵌套集的一个非常有效的替代方案。