sql Server 递归查询
插入数据
insert into Department (Id,Name,ParentId) VALUES (1,'总经办',0), (2,'研发部',1), (3,'人事部',1), (4,'设计部',2), (5,'行政部',3)
查询意图:
查询某个部门下所有子部门包括本部门所在层级
WITH CTE AS( SELECT Id ,0 as LEVEL ,Name FROM Department WHERE ParentSId =0 -- 查询的第一层,一般父级的id为0 UNION ALL SELECT D.Id ,LEVEL+1 ,Name FROM Department D INNER JOIN CTE ON CTE.Id=D.Id --递归层查询 ) SELECT Id,LEVEL,Name FROM CTE ORDER BY LEVEL,Id ---递归结果查询
结果:
Id | LEVEL | Name |
1 | 0 | 总经办 |
2 | 1 | 研发部 |
3 | 1 | 人事部 |
4 | 2 | 设计部 |
5 | 3 | 行政部 |
注:此方式不会依赖索引,所以很影响性能
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2021-08-19 Redis An unhandled exception has occurred while executing the request. MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.
2021-08-19 Ng Alain 路由复用标签右键的刷新按钮如何实现