Heim > Datenbank > MySQL-Tutorial > Wie können rekursive CTEs in SQL Server eine Kategorie und ihren Vorgängerpfad abrufen?

Wie können rekursive CTEs in SQL Server eine Kategorie und ihren Vorgängerpfad abrufen?

Susan Sarandon
Freigeben: 2025-01-15 11:30:44
Original
516 Leute haben es durchsucht

How Can Recursive CTEs in SQL Server Retrieve a Category and its Ancestor Path?

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

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

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

Ergebnisse

Die Abfrage gibt die folgenden Ergebnisse zurück:

<code>Id     Name       Path
2      Laptops    Business,Laptops</code>
Nach dem Login kopieren

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!

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