使用SQL语句写递归查询
要编写递归 SQL 语句,你可以使用通用表达式(Common Table Expressions,CTE)和递归查询功能。CTE 允许在 SQL 查询中定义临时的命名查询,并且可以在查询内部引用自身。
以下是一个示例来演示如何编写递归 SQL 语句:
假设有一个员工表 employees
,其中包含列 id
、name
和 manager_id
,表示员工的唯一标识、姓名和上级经理的标识。
要获取某个员工及其所有下属的信息,可以使用递归查询来实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 | WITH RECURSIVE employee_hierarchy AS ( SELECT id, name, manager_id FROM employees WHERE id = <employee_id> -- 指定初始员工的 ID UNION ALL SELECT e.id, e.name, e.manager_id FROM employees e JOIN employee_hierarchy eh ON e.manager_id = eh.id ) SELECT * FROM employee_hierarchy; |
上述示例中,使用了一个名为 employee_hierarchy
的 CTE 命名查询。首先,初始化递归查询的起始条件,从 employees
表中选择指定的初始员工,并将其作为递归查询的基础。然后,递归部分通过连接 employees
表与前一级别的结果集(即 employee_hierarchy
)来获取下属的信息,直到没有下属为止。
最后,通过在主查询中选择 employee_hierarchy
所有的结果,你将获得包括初始员工及其所有下属的完整员工信息。
请注意,递归查询可能涉及到表的自连接和循环引用,因此需要谨慎使用,并确保递归终止条件正确设置,以避免无限循环。
如下是根据自己业务,查询的向上递归
1 2 3 4 5 6 7 8 9 10 11 | WITH RECURSIVE depart_hierarchy AS ( SELECT id, parent_id FROM sys_depart WHERE depart_manager=#{username} UNION ALL SELECT e.id, e.parent_id FROM sys_depart e JOIN depart_hierarchy eh ON e.id = eh.parent_id ) SELECT id FROM depart_hierarchy WHERE LENGTH(parent_id)>0 |
每天学习一点点,你就进步一点点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!