是否可以使用一个 sql 查询遍历分层 table 直到 NULL

Is it possible to use one sql query to iterate through hierarchical table till NULL

例如,我 table 看起来像这样:

| ID (This is primary key) | parent (this refers to other rows in this table) |
|--------------------------|--------------------------------------------------|
| 1                        | NULL                                             |
| 2                        | 3                                                |
| 3                        | 1                                                |

是否可以有一个 mysql 查询 return 我 parents 的所有层次结构直到它命中 NULL?

例如,如果我要求第 2 行 parents,我想得到第 2 行,然后是第 3 行和第 1 行。如果我要求第 3 行 parents,我想要获取第 3 行和第 1 行。

(顺便说一句,我希望我的 table 有多个带有 NULL parents 的行)。

这可以吗,如果可以怎么办?

MySQL 8.0 recursive queries 之前,您无法轻松完成此操作。

我在 2017 年 4 月为 Percona Live 会议做了一个演示 Recursive Query Throwdown in MySQL 8.0,展示了如何做到这一点。

您还可以看到:

无法使用您选择的表示树的结构从 mysql 中的单个查询获取层次结构。您可以切换到 oracle("oracle connect by" 有一个 google)或为您的数据使用不同的结构(邻接列表)或 运行 不确定数量的查询。