您的当前位置:首页 >新闻中心 >SQL如何求解省市区中的递归问题? 正文
时间:2025-11-05 15:31:26 来源:网络整理编辑:新闻中心
递归递归是指程序调用自身的一种编程技巧,在SQL中也有递归查询。下面我们通过一个省市区的示例来讲解递归查询的用法。问题有如下一张表City,图片希望得到如下结果图片该如何写这个查询?问题分析我们从上面
递归是求解区中指程序调用自身的一种编程技巧,在SQL中也有递归查询。省市下面我们通过一个省市区的归问示例来讲解递归查询的用法。
有如下一张表City,求解区中
图片
希望得到如下结果
图片
该如何写这个查询?省市
我们从上面的问题中发现,省市区全部在同一列中,IT技术网归问而他们的求解区中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;1.2.3.4.5.6.7.8.递归查询写完后,可以查看一下递归部分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,31.2.3.4.5.6.7.8.9.10.11.结果如下:
图片
感兴趣的小伙伴可以动手试一下。站群服务器
归问探索Lativ的时尚魅力(品牌标志,质量保证,时尚品味)2025-11-05 15:26
Cacti监控硬盘I/O的方法2025-11-05 15:17
Cacti监控华为交换机不显示端口解决办法2025-11-05 15:04
Cacti与Nagios网络监控的区别-NPC Settings和Thold的安装2025-11-05 14:49
以和平金铂雅理疗(放松身心,迎接新生活)2025-11-05 14:46
使用MRTG画图进行监控2025-11-05 14:25
Zabbix客户端的安装配置2025-11-05 14:23
如何满足保险集团千亿数据审计要求2025-11-05 14:16
战神Z7屏幕评测(一览战神Z7屏幕的视觉盛宴)2025-11-05 13:44
威胁面面观:揭露基于LLM的聊天机器人设置和隐私策略2025-11-05 13:35
电脑磁盘错误的常见原因及解决方法(磁盘错误对电脑运行的影响及如何应对)2025-11-05 15:21
警示!QNAP QTS 操作系统和应用程序中存在高危漏洞2025-11-05 15:18
Cacti如何监控Nginx运行状态2025-11-05 14:41
win下安装MRTG2025-11-05 14:10
小米手机配置怎么样?(深入探究小米手机的配置性能)2025-11-05 13:58
每秒上千次高并发访问,HDFS优雅的抗住了2025-11-05 13:39
Zabbix配置Email2025-11-05 13:26
MRTG在WINDOWS下的安装指南2025-11-05 13:10
超越漏洞扫描,加强攻击面管控2025-11-05 12:45