sql實際應用-遞歸查詢


1、既然要談到sql,數據庫表是必須的

 

2、數據結構

   

3、獲取某個節點的所有子節點

    傳統的寫法(sql2000) 很麻煩,暫且就不寫了

    來看看CTE的寫法

   

CREATE PROC sp_getTreeById(@TreeId int)
AS
BEGIN
    
    WITH cteTree
        AS (SELECT *
              FROM TuziTree
              WHERE Id = @TreeId  --第一個查詢作為遞歸的基點(錨點)
            UNION ALL
            SELECT TuziTree.*     --第二個查詢作為遞歸成員, 下屬成員的結果為空時,此遞歸結束。
              FROM
                   cteTree INNER JOIN TuziTree ON cteTree.Id = TuziTree.ParentId) 
        SELECT *
          FROM cteTree 
  
END

  測試一下啊  

 exec  sp_getTreeById  @TreeId=1001                          

結果

-----------------------------------------------

4、使用節點路徑來做(每個節點路徑都保存自身的路徑和所有父節點的路徑=自己和所有父節點的關聯)

   

5、既然有個路徑

  那么查詢其所有子節點 只需要 where nodePath like '/1001/%'了

  這樣就會簡單很多,加上索引。

總結:

  如果在性能的需要上,我們可以采用按需加載,點擊節點時候 才會加載其所有子節點。

  如果在變化不大的情況下,可以采用緩存 。這樣的處理 可以滿足很多業務需求。

  良好的表設計會給后期的開發以及需求變化 帶來更多的便利。

  下次繼續總結sql方面的知識,案例一切以實際工作演變而來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM