SQL Server中使用遞歸自連線表示層次資料的技巧
假設您有一個名為「Categories」的資料表,包含Id、Name和ParentId列,允許在類別中建立無限層次結構。為了顯示「Business Laptops」類別及其所有祖先類別,您可以利用遞歸公共表格運算式 (CTE) 的強大功能。
讓我們建立一個範例「Categories」表格並填入資料來說明解決方案:
<code class="language-sql">DECLARE @Categories AS TABLE ( Id INT, Name VARCHAR(100), ParentId INT ); INSERT INTO @Categories VALUES (1, 'A', NULL), (2, 'A.1', 1), (3, 'A.2', 1), (4, 'A.1.1', 2), (5, 'B', NULL), (6, 'B.1', 5), (7, 'B.1.1', 6), (8, 'B.2', 5), (9, 'A.1.1.1', 4), (10, 'A.1.1.2', 4);</code>
接下來,我們建立一個名為「PathFinder」的遞歸CTE來遍歷父子關係,並將祖先名稱連接到「Path」列:
<code class="language-sql">WITH PathFinder AS ( SELECT Id, Name, Name AS Path, ParentId FROM @Categories WHERE ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(cf.Path + ', ' + t.Name AS VARCHAR(100)), t.ParentId FROM @Categories t INNER JOIN PathFinder cf ON t.ParentId = cf.Id )</code>
最後,我們可以使用PathFinder CTE來擷取「Business Laptops」類別的名稱及其祖先:
<code class="language-sql">SELECT Name, Path FROM PathFinder WHERE Name = 'Business Laptops';</code>
此查詢將傳回類別名稱及其祖先,祖先名稱之間以逗號分隔。
以下是遞迴查詢的細分:
使用這種遞歸方法,您可以有效地在SQL Server中表示和查詢層次數據,這為管理和分析具有固有關係的數據提供了一種寶貴的技術。
以上是如何在SQL Server中使用遞歸自連線來顯示分層資料祖先?的詳細內容。更多資訊請關注PHP中文網其他相關文章!