<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2599字,需瀏覽 6分鐘

           ·

          2023-11-08 07:14

          點(diǎn)擊關(guān)注公眾號,SQL干貨及時獲取

              
              
          后臺回復(fù):1024,獲取海量學(xué)習(xí)資源
          SQL刷題專欄
          SQL145題系列


          大家注意:

          因為微信改了推送機(jī)制,會有小伙伴刷不到當(dāng)天的文章,

          一些比較實用的知識和信息,錯過了就是錯過了。

          所以建議大家加個星標(biāo),就能第一時間收到推送了。

          遞歸

          遞歸是指程序調(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.parentIdINNER JOIN(SELECT * FROM CTE WHERE LEVEL=3) AS t3 ON t2.id=t3.parentIdORDER BY 1,2,3


          結(jié)果如下:


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


              
              

          最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。


          有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行

          數(shù)據(jù)前線


          后臺回復(fù):1024,獲取一份精心整理的技術(shù)干貨

          后臺回復(fù):進(jìn)群,帶你進(jìn)入高手如云的交流群。

                  
                  

          推薦閱讀

                    
                    
                    
                    

          瀏覽 928
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美中文字幕观看 | caobibi99 | 麻豆国产成人AV一区二区三区 | 欧美极品少妇 | 网络色色大香蕉 |