Heim >Datenbank >MySQL-Tutorial >Wie verwende ich rekursiven Self-Join in SQL Server, um hierarchische Datenvorfahren anzuzeigen?
Tipp zur Verwendung von rekursivem Self-Join zur Darstellung hierarchischer Daten in SQL Server
Angenommen, Sie haben eine Tabelle namens „Kategorien“ mit den Spalten Id, Name und ParentId, die die Erstellung unbegrenzter Hierarchien innerhalb von Kategorien ermöglicht. Um die Kategorie „Business-Laptops“ und alle ihre Vorgängerkategorien anzuzeigen, können Sie die Leistungsfähigkeit rekursiver gemeinsamer Tabellenausdrücke (CTEs) nutzen.
Lassen Sie uns eine Beispieltabelle „Kategorien“ erstellen und sie mit Daten füllen, um die Lösung zu veranschaulichen:
<code class="language-sql">DECLARE @Categories AS TABLE ( Id INT, Name VARCHAR(100), ParentId INT ); INSERT INTO @Categories VALUES (1, 'A', NULL), (2, 'A.1', 1), (3, 'A.2', 1), (4, 'A.1.1', 2), (5, 'B', NULL), (6, 'B.1', 5), (7, 'B.1.1', 6), (8, 'B.2', 5), (9, 'A.1.1.1', 4), (10, 'A.1.1.2', 4);</code>
Als nächstes erstellen wir einen rekursiven CTE namens „PathFinder“, um über Eltern-Kind-Beziehungen zu iterieren und Vorfahrennamen in der Spalte „Pfad“ zu verketten:
<code class="language-sql">WITH PathFinder AS ( SELECT Id, Name, Name AS Path, ParentId FROM @Categories WHERE ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(cf.Path + ', ' + t.Name AS VARCHAR(100)), t.ParentId FROM @Categories t INNER JOIN PathFinder cf ON t.ParentId = cf.Id )</code>
Schließlich können wir den PathFinder CTE verwenden, um den Namen der Kategorie „Business-Laptops“ und ihre Vorfahren abzurufen:
<code class="language-sql">SELECT Name, Path FROM PathFinder WHERE Name = 'Business Laptops';</code>
Diese Abfrage gibt den Kategorienamen und seine durch Kommas getrennten Vorfahren zurück.
Hier ist eine Aufschlüsselung der rekursiven Abfragen:
Mit diesem rekursiven Ansatz können Sie hierarchische Daten in SQL Server effizient darstellen und abfragen, was eine wertvolle Technik zum Verwalten und Analysieren von Daten mit inhärenten Beziehungen bietet.
Das obige ist der detaillierte Inhalt vonWie verwende ich rekursiven Self-Join in SQL Server, um hierarchische Datenvorfahren anzuzeigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!