自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL如何求解省市區(qū)中的遞歸問題?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
遞歸是指程序調(diào)用自身的一種編程技巧,在SQL中也有遞歸查詢。下面我們通過一個省市區(qū)的示例來講解遞歸查詢的用法。

遞歸

遞歸是指程序調(diào)用自身的一種編程技巧,在SQL中也有遞歸查詢。下面我們通過一個省市區(qū)的示例來講解遞歸查詢的用法。

問題

有如下一張表City,

圖片圖片

希望得到如下結(jié)果

圖片圖片

該如何寫這個查詢?

問題分析

我們從上面的問題中發(fā)現(xiàn),省市區(qū)全部在同一列中,而他們的ParentID有某種聯(lián)系。仔細(xì)看市一級的ParentID正好是省的ID,而區(qū)一級的ParentID正好是市的ID,這完全符合我們遞歸定義。

示例代碼

根據(jù)我們上面的分析我們先寫出遞歸部分

--遞歸部分
;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;

遞歸查詢寫完后,可以查看一下遞歸部分CTE里面的內(nèi)容

圖片圖片

然后我們只需要將省市區(qū)一一列出來即可,注意下面的這段代碼要和上面的遞歸部分一起執(zhí)行。

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,3

結(jié)果如下:

圖片圖片

感興趣的小伙伴可以動手試一下。

責(zé)任編輯:武曉燕 來源: SQL數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2021-04-25 09:42:40

SQL遞歸SQL Server

2021-08-03 07:40:47

SQL年份語句

2020-12-03 15:00:47

區(qū)塊鏈互聯(lián)網(wǎng)

2024-08-08 15:25:38

2023-08-29 09:46:12

SQLCTE遞歸

2020-04-24 12:48:01

新基建物聯(lián)網(wǎng)IOT

2022-03-15 08:36:46

遞歸查詢SQL

2020-03-05 12:22:07

物聯(lián)網(wǎng)基建IOT

2020-03-06 16:57:24

基建GDP

2021-08-12 07:49:24

SQL遞歸用法

2021-09-10 18:47:20

華為人工智能

2010-10-11 09:05:40

SQL Server

2021-11-09 06:55:03

SQLServer排序

2021-04-09 10:37:40

SQL Server數(shù)據(jù)庫排名

2010-06-11 09:13:20

openSUSE 網(wǎng)卡

2010-06-11 13:05:41

openSUSE視頻

2011-08-19 14:38:22

SQL Server 2008遞歸查詢

2021-11-19 08:12:45

SQL重疊數(shù)據(jù)

2010-06-09 13:03:00

Opensuse分區(qū)
點贊
收藏

51CTO技術(shù)棧公眾號