一尘不染

递归自我查询

mysql

我有下表:

myTable:
+----+----------+
| id | parentID |
+----+----------+
|  1 |     null |
|  2 |        1 |
|  3 |        1 |
|  4 |        2 |
|  5 |        4 |
-----------------

我想让所有行都回溯,直到不再有parentID为止。因此, “ .... WHERE id = 5” 会给我:

5, 4, 2, 1

阅读 284

收藏
2020-05-17

共1个答案

一尘不染

您正在使用邻接表模型来组织层次结构数据。这种递归操作很困难的事实实际上是该模型的一个主要缺点。

一些DBMS(例如SQL Server 2005,Postgres 8.4和Oracle
11g)支持使用带有关键字的常用表表达式进行递归查询WITH

对于MySQL,您可能有兴趣查看下面的文章,该文章描述了替代模型(嵌套集模型),该模型使递归操作更容易(可能):

此外,我还建议您查看Bill Karwin在上面的评论中指出的演示文稿。所描述的闭合表模型是嵌套集的非常有效的替代方案。

2020-05-17