您的当前位置:首页 >新闻中心 >SQL如何求解省市区中的递归问题? 正文

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.

结果如下:

图片

感兴趣的小伙伴可以动手试一下。站群服务器

归问
下一篇:需求 首先保证你有一个自有域名,然后登录到CloudFlare,添加你的域名。遵循指令操作,使用它给出的默认值就行了。你将让CloudFlare来托管你的域,所以你需要调整你的注册机构的设置。假如你想要使用子域名,请为它添加一条‘A’记录。目前,任何IP地址都可以。DDclient是一个Perl客户端,用于更新动态DNS网络服务提供商帐号下的动态DNS条目。它最初是由保罗·巴利编写的,现在大多数是由维姆潘科在做。它能做的不仅仅是动态DNS,也可以通过几种不同的方式获取你的WAN口IP地址。CloudFlare 的一个功能是它允许你通过API或叫做ddclient的命令行脚本更新你的DNS记录。不管哪一个,结果都一样,而且它是个免费软件。不幸的是,ddclient并不能在CloudFlare中即开即用。它需要打补丁,这里就是要介绍怎样在Debian或Ubuntu上破解它,它也能在带有Raspberry Pi的Raspbian上工作。在Ubuntu上安装ddclient 打开终端,并运行以下命令sudo apt-get install ddclient现在,你需要使用以下命令来安装补丁sudo apt-get install curl sendmail libjson-any-perl libio-socket-ssl-perlcurl -O http://blog.peter-r.co.uk/uploads/ddclient-3.8.0-cloudflare-22-6-2014.patchsudo patch /usr/sbin/ddclient < ddclient-3.8.0-cloudflare-22-6-2014.patch以上命令用来完成ddclient的安装和打补丁配置ddclient 你需要使用以下命令来编辑ddclient.conf文件sudo vi /etc/ddclient.conf添加以下信息##### CloudFlare (cloudflare.com)###ssl=yesuse=web, web=dyndnsprotocol=cloudflare, server=www.cloudflare.com, zone=domain.com, login=you@email.com, password=api-key host.domain.comComment out:#daemon=300你的 api-key 可以从 CloudFlare帐号页面找到,ssl=yes 可能已经设置,use=web, web=dyndns 表示使用 dyndns 来确定 IP(用于 NAT)。你已经搞定了。登录到 https://www.cloudflare.com 并检查列出的与你域名对应的IP地址是否与 http://checkip.dyndns.com 列出的相匹配。使用以下命令来验证你的设置sudo ddclient -daemon=0 -debug -verbose -noquiet