1. 程式人生 > >SQLServer CTE遞歸和循環

SQLServer CTE遞歸和循環

varchar bsp arch server sql 信息工程 keyword rom sele

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遞歸和循環