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
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
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!