我有下表:
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。
WITH
对于MySQL,您可能有兴趣查看下面的文章,该文章描述了替代模型(嵌套集模型),该模型使递归操作更容易(可能):
此外,我还建议您查看Bill Karwin在上面的评论中指出的演示文稿。所描述的闭合表模型是嵌套集的非常有效的替代方案。