SQL Server 中的遞歸自連線
在SQL Server 中,遞歸自連線可讓您透過連線基於父子關係多次將表連接到自身。
執行遞歸自連接檢索與特定層次結構相關的記錄,可以採用以下策略:
使用公共表表達式(CTE)
使用公共表表達式(CTE)
WITH q AS ( SELECT * FROM mytable WHERE ParentID IS NULL UNION ALL SELECT m.* FROM mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q
CTE,也稱為遞歸查詢,可用於實現遞歸自連線。核心思想是定義一個錨查詢,選擇滿足特定條件(例如,沒有父記錄)的記錄,然後使用遞歸子查詢將子記錄附加到結果中:
WITH q AS ( SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM mytable m WHERE ParentID IS NULL UNION ALL SELECT m.*, q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN FROM mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q ORDER BY bc
透過添加排序遞歸子查詢的條件,樹順序可以是保留:
以上是SQL Server 中的遞歸自連線如何有效地導覽分層資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!