首頁 >資料庫 >mysql教程 >如何在不使用CONNECT_BY的情況下有效率地檢索SQL Server 2005中的分層資料?

如何在不使用CONNECT_BY的情況下有效率地檢索SQL Server 2005中的分層資料?

Barbara Streisand
Barbara Streisand原創
2024-12-20 12:02:17341瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn