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