2023-8-7 记录一次面试题,使用Sql进行递归

打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

 
题目如图所示,是数据库源,这次考官需要我用Sql,完成一次数据查询

需要根据Excel数据查询结果如上图,这时候我看到了父子关系,很容易就联想到了需要使用父子关系,既然是父子关系,一般来说应该递归跑不掉了,使用Sql进行递归代码如下:
  1. WITH TEST_CTE
  2. AS
  3. (
  4. SELECT 地区表1.地区编号, 地区表1.地区名称, 地区表1.上级编号, Cast(地区表1.地区名称 as nvarchar(4000)) AS 详细地区名称
  5. FROM 地区表 地区表1
  6. WHERE 地区表1.上级编号 = 0
  7. UNION ALL
  8. SELECT 地区表2.地区编号, 地区表2.地区名称, 地区表2.上级编号, CTE.详细地区名称+''+   Cast(地区表2.地区名称 as nvarchar(4000)) AS 详细地区名称  
  9. FROM 地区表 地区表2
  10. INNER JOIN TEST_CTE CTE ON 地区表2.上级编号=CTE. 地区编号
  11. )
  12. SELECT TEST_CTE.地区编号, TEST_CTE.详细地区名称 AS 地区名称, TEST_CTE.上级编号 FROM TEST_CTE  ORDER BY TEST_CTE.地区编号
  13. OPTION(MAXRECURSION 3)
复制代码
这里整体上使用UNION ALL 进行全连接,UNION ALL 之上是查出父ID,是第一级,UNION ALL 之下是子ID的查询,也就是第二级、第三级,最后使用子ID等于父ID,基本上就可以了,注意Cast,需要转一下类型要不会报错,OPTION(MAXRECURSION 3)
网上所是递归次数 ,最后得出结果如下图

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表