MySQL数据库 表名:finedb.fine_authority_object 目录ID:id 父级目录ID:parentId 目录名称:displayName 写一段递归SQL,展示目录全路径名称,分隔符"/"
时间: 2024-05-03 22:17:10 浏览: 151
可以使用MySQL的WITH RECURSIVE语法来实现递归查询,以下是一个示例SQL:
```
WITH RECURSIVE cte AS (
SELECT id, parentId, displayName, displayName as path
FROM finedb.fine_authority_object
WHERE parentId IS NULL
UNION ALL
SELECT o.id, o.parentId, o.displayName, CONCAT(cte.path, '/', o.displayName)
FROM finedb.fine_authority_object o
JOIN cte ON o.parentId = cte.id
)
SELECT path FROM cte ORDER BY path;
```
这个SQL语句中,我们首先定义了一个公共表达式(CTE)`cte`,它包含了当前目录节点的id、parentId、displayName以及目录全路径名称path。在公共表达式的第一部分中,我们选择了所有parentId为空的节点,也就是根目录节点,作为起始点。在公共表达式的第二部分中,我们将所有子节点连接到其父节点上,并通过CONCAT函数将父节点的path和子节点的displayName拼接成新的path。最后,在主查询中,我们只需要从cte表中选择所有的path并按字典序排序即可。
需要注意的是,如果目录非常庞大,递归查询可能会带来性能问题。在这种情况下,可以考虑使用其他技术,如存储过程或应用程序代码,来实现递归查询。
阅读全文