MySQL数据库 表名:finedb.fine_authority_object 目录ID:id 父级目录ID:parentId 目录名称:name 写一段递归SQL,展示目录全路径名称,分隔符"/"
时间: 2024-05-10 07:16:21 浏览: 159
MySQL通过自定义函数实现递归查询父级ID或者子级ID
5星 · 资源好评率100%
可以使用MySQL的WITH RECURSIVE语法来实现递归查询,以下是示例代码:
```
WITH RECURSIVE cte AS (
SELECT id, parentId, name, name AS path
FROM finedb.fine_authority_object
WHERE parentId IS NULL
UNION ALL
SELECT o.id, o.parentId, o.name, CONCAT(cte.path, '/', o.name)
FROM finedb.fine_authority_object o
INNER JOIN cte ON o.parentId = cte.id
)
SELECT path
FROM cte
ORDER BY id;
```
解释一下代码:
- 在第一条SELECT语句中,我们选择了所有parentId为NULL的记录,即最顶层的目录。
- UNION ALL 将第二条SELECT语句的结果集与第一条语句的结果集合并。
- 第二条SELECT语句中,我们使用INNER JOIN将 fine_authority_object 表自连接,连接条件为子目录的 parentId 等于父目录的 id,这样就可以找到子目录了。然后我们使用 CONCAT 函数将父目录的 path 和子目录的 name 拼接起来,得到子目录的完整路径。
- 最后的SELECT语句中,我们选择了递归查询结果集中的 path 字段,并按照 id 排序输出。
这样就可以得到 fine_authority_object 表中所有目录的全路径名了。
阅读全文