首頁 >資料庫 >mysql教程 >如何從 SQL Server 2005 中的自引用表中有效地擷取分層資料?

如何從 SQL Server 2005 中的自引用表中有效地擷取分層資料?

Barbara Streisand
Barbara Streisand原創
2024-12-25 08:48:11294瀏覽

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

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