gpt4 book ai didi

MySQL从一个表中递归选择

转载 作者:行者123 更新时间:2023-11-29 03:26:36 25 4
gpt4 key购买 nike

我在 MySQL 中有这个表:

| id | mainid | name                |
+----+--------+---------------------+
| 1 | 0 | main 1 |
| 2 | 1 | sub 1 |
| 3 | 1 | sub 2 |
| 4 | 1 | sub 3 |
| 5 | 4 | subsub 1 |
| 6 | 4 | subsub 2 |
| 7 | 0 | main 2 |
| 8 | 7 | sub 4 |
| 9 | 7 | sub 5 |

mainid 字段与id 字段关联。

MySQL命令中是否有递归选择所有行的最佳实践?我想选择主项目下的所有子项目。

我尝试选择第一层的所有子项,例如 sub 1、sub 2、sub3 在 main 1 下。这很简单:

SELECT id, mainid, name FROM mytable WHERE mainid = '1';

但是是否有单行命令来选择相同的行以及 subsub1 和 subsub 2 行? (当然,如果我创建另一个更深的层次也是如此。)

最佳答案

你需要临时表和单独的存储过程

第一个存储过程将接收“父”id 并创建一个结果临时表:

结果(id、mainid、名称)

和检查临时表

检查(id,通过)(此表是避免无限循环所必需的)

所以,思路是调用内部存储过程,内部存储是这样的

PROC(currentId(int))

使用父 id 和 proc 将基本上执行您的查询所做的,但将其保存在内部临时表中,然后对于该临时表的每个元素(不在 CHECK 中),它将标记为已传入检查(只需插入行)并为 currentId 的每个“子级”调用相同的过程

然后将内部临时表中的所有数据插入到 RESULT 中,您将拥有整个后代列表

你有两种方法

检查 child 然后插入到RESULT或者插入到 RESULT 中,然后检查 child

数据顺序不同但结果应该是一样的

关于MySQL从一个表中递归选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35225064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com