SQL Server遞歸自連線:一種簡易方法
在資料庫管理中,遞歸自連接是一種允許表多次自連接的技術,能夠遍歷層次資料。在SQL Server中,這可以透過遞歸查詢來實現。
考慮以下場景:我們有一個名為「Person」的表,包含以下列:
<code>PersonID | Initials | ParentID</code>
該表表示一個層次結構,其中每個人都有一個「Initials」列,並且可能有一個「ParentID」引用另一個人。
要對「Person」表執行遞歸自連接,我們可以使用如下所示的公用表表達式(CTE):
<code class="language-sql">WITH q AS ( SELECT * FROM Person WHERE ParentID IS NULL UNION ALL SELECT m.* FROM Person m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q</code>
在這個CTE中:
為了保持樹的順序,可以在遞迴查詢中加入排序條件,如下所示:
<code class="language-sql">WITH q AS ( SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM Person 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 Person m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q ORDER BY bc</code>
透過更改ORDER BY條件,您可以控制層次結構中同級元素的排序。
以上是如何在SQL Server中執行遞歸自連線來遍歷層次結構資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!