2023-8-7 记录一次面试题,使用Sql进行递归
题目如图所示,是数据库源,这次考官需要我用Sql,完成一次数据查询
需要根据Excel数据查询结果如上图,这时候我看到了父子关系,很容易就联想到了需要使用父子关系,既然是父子关系,一般来说应该递归跑不掉了,使用Sql进行递归代码如下:
WITH TEST_CTE AS ( SELECT 地区表1.地区编号, 地区表1.地区名称, 地区表1.上级编号, Cast(地区表1.地区名称 as nvarchar(4000)) AS 详细地区名称 FROM 地区表 地区表1 WHERE 地区表1.上级编号 = 0 UNION ALL SELECT 地区表2.地区编号, 地区表2.地区名称, 地区表2.上级编号, CTE.详细地区名称+''+ Cast(地区表2.地区名称 as nvarchar(4000)) AS 详细地区名称 FROM 地区表 地区表2 INNER JOIN TEST_CTE CTE ON 地区表2.上级编号=CTE. 地区编号 ) SELECT TEST_CTE.地区编号, TEST_CTE.详细地区名称 AS 地区名称, TEST_CTE.上级编号 FROM TEST_CTE ORDER BY TEST_CTE.地区编号 OPTION(MAXRECURSION 3)
这里整体上使用UNION ALL 进行全连接,UNION ALL 之上是查出父ID,是第一级,UNION ALL 之下是子ID的查询,也就是第二级、第三级,最后使用子ID等于父ID,基本上就可以了,注意Cast,需要转一下类型要不会报错,OPTION(MAXRECURSION 3)
网上所是递归次数 ,最后得出结果如下图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构