Rekursive Self-Joins in SQL Server für hierarchische Daten beherrschen
Rekursive Selbstverknüpfungen sind für die Navigation hierarchischer Datenstrukturen innerhalb von SQL Server-Tabellen unerlässlich. Diese Technik ist besonders nützlich, wenn es um Daten geht, die in Eltern-Kind-Beziehungen organisiert sind, wie etwa Organigramme oder Stammbäume.
Ein einfacher Ansatz für rekursive Selbstverknüpfungen verwendet einen gemeinsamen Tabellenausdruck (CTE):
<code class="language-sql">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;</code>
Diese Abfrage definiert einen rekursiven CTE, q
. Die anfängliche SELECT
-Anweisung identifiziert die Wurzelknoten (diejenigen, bei denen ParentID
NULL ist). Das UNION ALL
kombiniert dies mit nachfolgenden SELECT
-Anweisungen, die den CTE rekursiv mit dem mytable
verbinden, um alle Nachkommen einzuschließen. Die letzte SELECT
-Anweisung ruft den vollständigen hierarchischen Datensatz ab.
Aufrechterhaltung der hierarchischen Ordnung
Um die ursprüngliche hierarchische Struktur und Reihenfolge beizubehalten, ist eine geänderte Abfrage erforderlich:
<code class="language-sql">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;</code>
Diese erweiterte Abfrage fügt mithilfe von bc
eine Spalte ROW_NUMBER()
hinzu, um eindeutige Bezeichner zuzuweisen und so die Reihenfolge innerhalb jeder Ebene der Hierarchie aufrechtzuerhalten. Die ORDER BY bc
-Klausel stellt sicher, dass das Endergebnis die ursprüngliche Baumstruktur widerspiegelt. Das Anpassen der ORDER BY
-Klauseln innerhalb der ROW_NUMBER()
-Funktion ermöglicht eine individuelle Anpassung der Reihenfolge der Geschwisterknoten.
Das obige ist der detaillierte Inhalt vonWie kann ich in SQL Server rekursive Selbstverknüpfungen durchführen, um hierarchische Daten zu untersuchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!