Selbstreferenzielle Abfrage mit rekursiven allgemeinen Tabellenausdrücken (CTE) in SQL Server
Einführung
In relationalen Datenbanken sind selbstreferenzielle Abfragen eine leistungsstarke Technik zum Durchlaufen hierarchischer Beziehungen in einer einzelnen Tabelle. Zu diesem Zweck stellt SQL Server allgemeine Tabellenausdrücke (Common Table Expressions, CTEs) bereit, die effiziente und ausdrucksstarke rekursive Abfragen ermöglichen.
Frage
Stellen Sie sich eine vereinfachte „Kategorie“-Tabelle mit den Spalten „ID“, „Name“ und „ParentId“ vor. Die Tabelle unterstützt eine unbestimmte Hierarchie von Kategorien, wie im folgenden Beispiel gezeigt:
<code>Id Name ParentId 1 Business NULL 2 Laptops 1 3 Asus 2</code>
Das Ziel besteht darin, eine Abfrage zu erstellen, die nicht nur eine bestimmte Kategorie (z. B. „Business-Laptops“) abruft, sondern auch eine durch Kommas getrennte Liste aller übergeordneten Kategorien bereitstellt.
Lösung: Rekursiver CTE
Um dieses Problem zu lösen, kann rekursiver CTE verwendet werden. Der äußerste CTE definiert den Startpunkt der Rekursion, während der rekursive Begriff die Logik der erweiterten Hierarchie definiert:
<code>WITH CTE AS ( SELECT Id, Name, Name AS Path, ParentId FROM Categories WHERE ParentId IS NULL UNION ALL SELECT t.Id, t.Name, cast(cte.Path + ',' + t.Name as varchar(100)), t.ParentId FROM Categories t INNER JOIN CTE ON t.ParentId = CTE.Id )</code>
Abfrage
Um eine bestimmte Kategorie und ihre übergeordnete Kategorie abzurufen, verwenden wir eine einfache Abfrage:
<code>SELECT Id, Name, Path FROM CTE WHERE Name = 'Business Laptops'</code>
Ergebnisse
Die Abfrage gibt die folgenden Ergebnisse zurück:
<code>Id Name Path 2 Laptops Business,Laptops</code>
In diesem Beispiel ist „Business Laptops“ ein untergeordnetes Element von „Laptops“, das wiederum ein untergeordnetes Element von „Business“ ist. Die Spalte „Pfad“ stellt den vollständigen hierarchischen Pfad zurück zur Stammkategorie bereit.
Fazit
Rekursive CTEs in SQL Server bieten eine elegante und effiziente Möglichkeit, hierarchische Beziehungen in Tabellen zu navigieren. Durch die Nutzung der Rekursionskraft können komplexe Abfragen erstellt werden, um wertvolle Erkenntnisse aus hierarchischen Datenstrukturen zu gewinnen.
Das obige ist der detaillierte Inhalt vonWie können rekursive CTEs in SQL Server eine Kategorie und ihren Vorgängerpfad abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!