是否可以使用一个 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)或为您的数据使用不同的结构(邻接列表)或 运行 不确定数量的查询。
例如,我 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)或为您的数据使用不同的结构(邻接列表)或 运行 不确定数量的查询。