SQLServer CTE递归和循环

Posted nfqd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer CTE递归和循环相关的知识,希望对你有一定的参考价值。

Create table #country (AreaNam NVARCHAR(10),BelongTo Nvarchar(10),Msg varchar(100))

 

INSERT INTO #country
SELECT ‘中国‘,‘中国‘,null union all
SELECT ‘江苏‘,‘中国‘,null union all
SELECT ‘南京‘,‘江苏‘,null union all
SELECT ‘无锡‘,‘江苏‘,null union all
SELECT ‘徐州‘,‘江苏‘,null union all
SELECT ‘扬州‘,‘江苏‘,null union all
SELECT ‘苏州‘,‘江苏‘,null union all
SELECT ‘六合区‘,‘南京‘,null union all
SELECT ‘江宁区‘,‘南京‘,null union all
SELECT ‘浦口区‘,‘南京‘,null union all
SELECT ‘仙林区‘,‘南京‘,null union all
SELECT ‘建邺区‘,‘南京‘,null union all
SELECT ‘宝应‘,‘扬州‘,null union all
SELECT ‘仪征‘,‘扬州‘,null union all
SELECT ‘小官庄‘,‘宝应‘,null union all
SELECT ‘范水‘,‘宝应‘,null union all
SELECT ‘鲁垛‘,‘宝应‘,null union all
SELECT ‘安宜‘,‘宝应‘,null union all
SELECT ‘组全‘,‘小官庄‘,null union all
SELECT ‘房桥‘,‘小官庄‘,null union all
SELECT ‘直下沟‘,‘小官庄‘,null union all
SELECT ‘山东‘,‘中国‘,null union all
SELECT ‘济南‘,‘山东‘,null union all
SELECT ‘青岛‘,‘山东‘,null union all
SELECT ‘淄博‘,‘山东‘,null union all
SELECT ‘烟台‘,‘山东‘,null union all
SELECT ‘张店‘,‘淄博‘,null union all
SELECT ‘博山‘,‘淄博‘,null union all
SELECT ‘淄川‘,‘淄博‘,null union all
SELECT ‘龙王山‘,‘浦口区‘,null union all
SELECT ‘高新区‘,‘浦口区‘,null union all
SELECT ‘陆军指挥学院‘,‘浦口区‘,null union all
SELECT ‘南京信息工程大学‘,‘浦口区‘,null union all
SELECT ‘金陵学院‘,‘浦口区‘,null

 

用CTE递归的方式去实现我们所想要的结果,SQL如下:

 

WITH CTE AS (
SELECT AreaNam,BelongTo,Msg FROM #country WHERE AreaNam=‘南京‘
UNION ALL
SELECT A.AreaNam,A.BelongTo,A.Msg FROM #country A INNER JOIN CTE B ON A.BelongTo=B.AreaNam
)
SELECT * FROM CTE

 


AreaNam BelongTo Msg
南京 江苏 NULL
六合区 南京 NULL
江宁区 南京 NULL
浦口区 南京 NULL
仙林区 南京 NULL
建邺区 南京 NULL
龙王山 浦口区 NULL
高新区 浦口区 NULL
陆军指挥学院 浦口区 NULL
南京信息工程大学 浦口区 NULL
金陵学院 浦口区 NULL
























































以上是关于SQLServer CTE递归和循环的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver的CTE实现递归查询

MYSQL 8.019 CTE 递归查询怎么解决死循环三种方法

sqlserver实现树形结构递归查询(无限极分类)

SqlServer :实现树形结构递归查询(无限极分类)

将 SQL Server 中的递归 CTE 转换为 netezza

将 PostgreSQL 递归 CTE 转换为 SQL Server