Heim > Datenbank > MySQL-Tutorial > Wie kann ich hierarchische Daten effizient aus einer selbstreferenzierenden Tabelle in SQL Server 2005 abrufen?

Wie kann ich hierarchische Daten effizient aus einer selbstreferenzierenden Tabelle in SQL Server 2005 abrufen?

Barbara Streisand
Freigeben: 2024-12-25 08:48:11
Original
284 Leute haben es durchsucht

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

Navigieren in hierarchischen Daten in SQL Server 2005

Das Abrufen hierarchischer Daten aus SQL Server 2005 kann eine Herausforderung sein, insbesondere wenn es um eine Selbstreferenzierung geht Tabelle, in der untergeordnete Datensätze auf die IDs ihrer Eltern verweisen. Obwohl häufig Ansichten und komplexe Abfragen verwendet werden, mangelt es ihnen oft an Eleganz und Effizienz.

Eine Lösung nutzt einen Common Table Expression (CTE), um die hierarchische Struktur aufzubauen und einen Pfad für jedes Element zu generieren. Bei diesem Ansatz wird ein CTE mit dem Namen „Parent“ erstellt, der mit der Auswahl der Stammknoten (ParentID ist NULL) und ihrer Namen als Pfad beginnt. Anschließend werden untergeordnete Knoten rekursiv hinzugefügt und ihre Namen mit dem übergeordneten Pfad verkettet.

Der folgende Code veranschaulicht diesen Ansatz:

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
Nach dem Login kopieren

Dieser CTE erstellt eine hierarchische Tabelle mit einer zusätzlichen Spalte „Pfad“, die enthält der vollständige Pfad zu jedem Knoten. Die resultierende Abfrageausgabe lautet:

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
Nach dem Login kopieren

Dieser Ansatz bietet eine saubere und effiziente Möglichkeit, hierarchische Daten aus einer selbstreferenzierenden Tabelle in SQL Server 2005 abzurufen. Er macht komplexe manuelle Abfragen überflüssig und ermöglicht einfachere Navigation in der Hierarchie.

Das obige ist der detaillierte Inhalt vonWie kann ich hierarchische Daten effizient aus einer selbstreferenzierenden Tabelle in SQL Server 2005 abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage