首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2008

SQL Server 2008 CTE 遞歸查詢:由父查子與由子查父完整範例

     編輯:SQL Server 2008

一、由父節點遞歸查詢所有子孫節點

WITH cte (id, parentid, text) AS (
    -- Anchor: 根節點
    SELECT id, parentid, text FROM treeview WHERE parentid = 450
    UNION ALL
    -- Recursive: 往下查找子節點
    SELECT t.id, t.parentid, t.text
    FROM treeview AS t
    INNER JOIN cte AS c ON t.parentid = c.id
)
SELECT id, parentid, text FROM cte;

二、由子節點遞歸查詢所有祖先節點

WITH cte (id, parentid, text) AS (
    -- Anchor: 起始子節點
    SELECT id, parentid, text FROM treeview WHERE id = 450
    UNION ALL
    -- Recursive: 往上查找父節點
    SELECT t.id, t.parentid, t.text
    FROM treeview AS t
    INNER JOIN cte AS c ON t.id = c.parentid
)
SELECT id, parentid, text FROM cte;

關鍵差異

方向Anchor 條件JOIN 條件
父 → 子WHERE parentid = @RootIdON t.parentid = c.id
子 → 父WHERE id = @ChildIdON t.id = c.parentid

注意事項

  • 預設最大遞歸層數 100,可用 OPTION (MAXRECURSION 0) 移除限制 (慎用防無限迴圈)。
  • 需確保資料無循環參考,否則會陷入無限遞歸。
  • 大量資料建議加入索引 INDEX (parentid) / INDEX (id) 提升 JOIN 效能。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved