Heim >Datenbank >MySQL-Tutorial >Wie können rekursive Self-Joins in SQL Server hierarchische Daten effizient navigieren?

Wie können rekursive Self-Joins in SQL Server hierarchische Daten effizient navigieren?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-17 15:31:11114Durchsuche

How Can Recursive Self-Joins in SQL Server Efficiently Navigate Hierarchical Data?

Rekursive Selbstverknüpfungen in SQL Server

In SQL Server können Sie mit einer rekursiven Selbstverknüpfung durch hierarchische Datenstrukturen navigieren, indem Sie a verknüpfen Tabelle mehrmals mit sich selbst verbinden, basierend auf einer Eltern-Kind-Beziehung.

Um eine rekursive Selbstverknüpfung durchzuführen, um zugehörige Datensätze abzurufen Auf eine bestimmte Hierarchie kann die folgende Strategie angewendet werden:

Verwendung eines Common Table Expression (CTE)

Ein CTE, auch bekannt als rekursive Abfrage, kann sein Wird verwendet, um einen rekursiven Self-Join zu implementieren. Die Kernidee besteht darin, eine Ankerabfrage zu definieren, die Datensätze auswählt, die ein bestimmtes Kriterium erfüllen (z. B. kein übergeordnetes Element), und dann eine rekursive Unterabfrage zu verwenden, um untergeordnete Datensätze an die Ergebnisse anzuhängen:

WITH q AS 
(
    SELECT  *
    FROM    mytable
    WHERE   ParentID IS NULL
    UNION ALL
    SELECT  m.*
    FROM    mytable m
    JOIN    q
    ON      m.parentID = q.PersonID
)
SELECT  *
FROM    q

Durch Hinzufügen einer Reihenfolge Bedingung für die rekursive Unterabfrage kann die Baumreihenfolge sein erhalten:

WITH    q AS 
(
    SELECT  m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc
    FROM    mytable m
    WHERE   ParentID IS NULL
    UNION ALL
    SELECT  m.*,  q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN
    FROM    mytable m
    JOIN    q
    ON      m.parentID = q.PersonID
)
SELECT  *
FROM    q
ORDER BY
        bc

Überlegungen:

  • Die Ankerabfrage sollte Datensätze auswählen, die die Wurzel der Hierarchie darstellen, die Sie durchlaufen möchten.
  • Die rekursive Unterabfrage sollte die untergeordneten Datensätze mit den übergeordneten Datensätzen unter Verwendung der entsprechenden Eltern-Kind-Beziehung verbinden Spalte.
  • Sie können der rekursiven Unterabfrage zusätzliche Spalten hinzufügen, um bei Bedarf Ebenen- oder Pfadinformationen zu verfolgen.

Das obige ist der detaillierte Inhalt vonWie können rekursive Self-Joins in SQL Server hierarchische Daten effizient navigieren?. 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