Heim > Datenbank > MySQL-Tutorial > Wie kann ich in SQL Server rekursive Selbstverknüpfungen durchführen, um hierarchische Daten zu untersuchen?

Wie kann ich in SQL Server rekursive Selbstverknüpfungen durchführen, um hierarchische Daten zu untersuchen?

Linda Hamilton
Freigeben: 2025-01-17 15:37:08
Original
422 Leute haben es durchsucht

How Can I Perform Recursive Self-Joins in SQL Server to Explore Hierarchical Data?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage