首页 > 数据库 > mysql教程 > 如何在不使用CONNECT_BY的情况下高效地检索SQL Server 2005中的分层数据?

如何在不使用CONNECT_BY的情况下高效地检索SQL Server 2005中的分层数据?

Barbara Streisand
发布: 2024-12-20 12:02:17
原创
341 人浏览过

How Can I Efficiently Retrieve Hierarchical Data in SQL Server 2005 Without CONNECT_BY?

从 SQL Server 2005 检索分层数据

由于 SQL Server 2005 中缺少熟悉的 CONNECT_BY 子句,检索分层数据可能会带来挑战。一种常见的方法是创建一个递归公用表表达式 (CTE),它遍历层次结构并构造所需的输出。

考虑包含对象层次结构的自引用表的示例,其中每个子记录都有一个列及其父级 ID。 CTE 可用于检索层次关系并为每个项目创建路径:

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
登录后复制

输出:

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
登录后复制

通过利用 CTE,我们可以递归地遍历层次结构,累积每个项目的路径,并以结构化的方式轻松检索所需的层次结构数据。这种方法为管理和查询 SQL Server 2005 中的分层数据提供了灵活高效的解决方案。

以上是如何在不使用CONNECT_BY的情况下高效地检索SQL Server 2005中的分层数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

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