此问题在此处已有答案:
How to create a MySQL hierarchical recursive query?(16个回答)
21天前关闭
我有一个comments
表,内容如下
| ID|父ID|内容|
| --|--|--|
| 1 |NULL|一|
| 2 |NULL| B|
| 3 |NULL| C|
| 4 | 1 |AA|
| 5 | 1 |AB|
| 6 | 1 |AC|
| 7 | 5 |阿坝|
| 8 | 5 |ABB|
我想选择comment with id = 1,所有的都是children和grand children。类似这样
| ID|父ID|内容|
| --|--|--|
| 1 |NULL|一|
| 4 | 1 |AA|
| 5 | 1 |AB|
| 6 | 1 |AC|
| 7 | 5 |阿坝|
| 8 | 5 |ABB|
现在我使用以下查询:
SELECT * FROM comments WHERE id = 1
UNION
SELECT * FROM comments WHERE parent_id IN (SELECT id FROM comments WHERE id = 1)
UNION
SELECT * FROM comments WHERE parent_id IN (SELECT id FROM comments WHERE parent_id IN (SELECT id FROM comments WHERE id = 1));
字符串
但是这种解决方案很快就会变得一团糟,而且容易出错,特别是当我还想得到更深层次的孩子,比如grand grand grand children时。
所以我的问题是,有没有什么方法可以让这个查询更简单?或者更高效?
1条答案
按热度按时间bbmckpt71#
在MySQL 8+上,我们可以使用递归CTE:
字符串