SQL如何求解省市区中的递归问题?
吾爱主题
阅读:172
2023-11-02 12:04:00
评论:0
递归
递归是指程序调用自身的一种编程技巧,在SQL中也有递归查询。下面我们通过一个省市区的示例来讲解递归查询的用法。
问题
有如下一张表City,
图片
希望得到如下结果
图片
该如何写这个查询?
问题分析
我们从上面的问题中发现,省市区全部在同一列中,而他们的ParentID有某种联系。仔细看市一级的ParentID正好是省的ID,而区一级的ParentID正好是市的ID,这完全符合我们递归定义。
示例代码
根据我们上面的分析我们先写出递归部分
--递归部分 ;WITH CTE AS ( SELECT ID,NAME,ParentId,1 AS Level FROM City WHERE parentId=0 UNION ALL SELECT t.id,t.NAME,t.parentId,cte.Level+1 AS Level FROM City t JOIN CTE ON t.parentId=CTE.id ) SELECT * FROM CTE;
递归查询写完后,可以查看一下递归部分CTE里面的内容
图片
然后我们只需要将省市区一一列出来即可,注意下面的这段代码要和上面的递归部分一起执行。
SELECT t1.name AS [一级地名] ,t2.name AS [二级地名] ,t3.name AS [三级地名] FROM (SELECT * FROM CTE WHERE LEVEL=1) AS t1 INNER JOIN (SELECT * FROM CTE WHERE LEVEL=2) AS t2 ON t1.id=t2.parentId INNER JOIN (SELECT * FROM CTE WHERE LEVEL=3) AS t3 ON t2.id=t3.parentId ORDER BY 1,2,3
结果如下:
图片
感兴趣的小伙伴可以动手试一下。
原文地址:https://mp.weixin.qq.com/s/G55wzv0yfFPsRpnAawKScg
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。