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)

网上所是递归次数 ,最后得出结果如下图

 


免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论