首页 > 数据库 > mysql教程 > 如何从 SQL Server 2005 中的自引用表中高效地检索分层数据?

如何从 SQL Server 2005 中的自引用表中高效地检索分层数据?

Barbara Streisand
发布: 2024-12-25 08:48:11
原创
291 人浏览过

How Can I Efficiently Retrieve Hierarchical Data from a Self-Referencing Table in SQL Server 2005?

在 SQL Server 2005 中导航分层数据

从 SQL Server 2005 检索分层数据可能具有挑战性,尤其是在处理自引用时表,其中子记录指向其父母的 ID。虽然视图和复杂查询很常见,但它们通常缺乏优雅和效率。

一种解决方案利用公共表表达式 (CTE) 来构建层次结构并为每个项目生成路径。此方法涉及创建一个名为 Parent 的 CTE,该 CTE 首先选择根节点(ParentID 为 NULL)及其名称作为路径。然后,它递归地添加子节点,将它们的名称连接到父路径。

以下代码演示了这种方法:

CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128));

INSERT INTO tblHierarchy VALUES (1, NULL, '1');
INSERT INTO tblHierarchy VALUES (2, NULL, '2');
INSERT INTO tblHierarchy VALUES (3, NULL, '3');
INSERT INTO tblHierarchy VALUES (4, 1, '1.1');
INSERT INTO tblHierarchy VALUES (5, 1, '1.2');
INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1');

WITH Parent AS
(
    SELECT
        ID,
        ParentID,
        Name AS Path
    FROM
        tblHierarchy
    WHERE
        ParentID IS NULL

    UNION ALL

    SELECT
        TH.ID,
        TH.ParentID,
        CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path
    FROM
        tblHierarchy TH
    INNER JOIN
        Parent
    ON
        Parent.ID = TH.ParentID
)
SELECT * FROM Parent
登录后复制

此 CTE 创建一个带有附加列 Path 的分层表,其中包含到每个节点的完整路径。生成的查询输出将是:

ID  ParentID    Path
1   NULL        1
2   NULL        2
3   NULL        3
4   1       1/1.1
5   1       1/1.2
6   4       1/1.1/1.1.1
登录后复制

此方法提供了一种干净、高效的方法来从 SQL Server 2005 中的自引用表检索分层数据。它消除了复杂的手动查询的需要,并允许更轻松地导航层次结构。

以上是如何从 SQL Server 2005 中的自引用表中高效地检索分层数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板