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中文网其他相关文章!