Heim >Datenbank >MySQL-Tutorial >Wie können rekursive Self-Joins in SQL Server hierarchische Daten effizient navigieren?
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:
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!