Heim >Datenbank >MySQL-Tutorial >Wie verwende ich rekursiven Self-Join in SQL Server, um hierarchische Datenvorfahren anzuzeigen?

Wie verwende ich rekursiven Self-Join in SQL Server, um hierarchische Datenvorfahren anzuzeigen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-15 11:15:44568Durchsuche

How to Use Recursive Self-Join in SQL Server to Display Hierarchical Data Ancestors?

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:

  • Basisfall: Der erste Teil des CTE wählt eine Kategorie aus, die keinen übergeordneten Knoten hat (d. h. den Wurzelknoten) und initialisiert ihren „Pfad“ mit ihrem Namen.
  • Rekursiver Fall: Der zweite Teil verbindet die Kategorien rekursiv mit ihren übergeordneten Kategorien und hängt ihre Namen an die Spalte „Pfad“ an. Dieser Vorgang wird fortgesetzt, bis keine unverarbeiteten Kategorien mehr vorhanden sind.
  • Ergebnis: CTE generiert eine Folge von Zeilen, die jeweils eine Kategorie und ihre vollständigen Vorfahren darstellen. Durch Auswahl des erforderlichen Kategorienamens aus diesem CTE können wir die erforderlichen Daten abrufen.

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!

Stellungnahme:
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