递归递归是指程序调用自身的一种编程技巧,在SQL中也有递归查询 。下面我们通过一个省市区的示例来讲解递归查询的用法 。
问题【SQL如何求解省市区中的递归问题?】有如下一张表City,
文章插图
图片
希望得到如下结果
文章插图
图片
该如何写这个查询?
问题分析我们从上面的问题中发现,省市区全部在同一列中,而他们的ParentID有某种联系 。仔细看市一级的ParentID正好是省的ID,而区一级的ParentID正好是市的ID,这完全符合我们递归定义 。
示例代码根据我们上面的分析我们先写出递归部分
--递归部分;WITH CTE AS (SELECT ID,NAME,ParentId,1 AS Level FROM City WHERE parentId=0UNION ALLSELECT t.id,t.NAME,t.parentId,cte.Level+1 AS Level FROM City tJOIN CTE ON t.parentId=CTE.id)SELECT * FROM CTE;
递归查询写完后,可以查看一下递归部分CTE里面的内容文章插图
图片
然后我们只需要将省市区一一列出来即可,注意下面的这段代码要和上面的递归部分一起执行 。
SELECTt1.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.parentIdINNER JOIN(SELECT * FROM CTE WHERE LEVEL=3) AS t3 ON t2.id=t3.parentIdORDER BY 1,2,3
结果如下:文章插图
图片
感兴趣的小伙伴可以动手试一下 。
推荐阅读
- MySQL 5.7和MySQL 8到底有哪些差异?
- 大模型编程实测:如何hold住复杂、跨语言代码需求?
- AI 编程时代已至,大模型如何助力开发者打造新质生产力?
- 抖音直播小风车怎么弄?抖音小风车怎么开通?如何开通抖音直播小风车功能!
- 如何禁止手机APP感知系统截屏?
- 普通人如何快乐过一生?情绪ABC法则或有助益!
- 面对焦虑年轻人如何调整自己?这四个方法或许能帮到你
- 开学一个多月后儿童精神科爆满?如何识别心理问题让孩子远离抑郁
- 怎么清理厨房贴纸 如何清理厨房贴纸
- 如何清理厨房的顽固油渍 怎么清理厨房顽固油污渍