Heim > Datenbank > MySQL-Tutorial > Wie werden rekursive CTEs Zeile für Zeile ausgeführt: Eine Schritt-für-Schritt-Erklärung?

Wie werden rekursive CTEs Zeile für Zeile ausgeführt: Eine Schritt-für-Schritt-Erklärung?

Patricia Arquette
Freigeben: 2024-12-31 11:03:13
Original
429 Leute haben es durchsucht

How Do Recursive CTEs Execute Line by Line: A Step-by-Step Explanation?

Ausführung rekursiver CTEs, Zeile für Zeile

Rekursive Common Table Expressions (CTEs) sind leistungsstarke SQL-Konstrukte, die rekursive Abfragen ermöglichen. Um zu verstehen, wie sie ausgeführt werden, betrachten Sie sie als eine Reihe von UNION ALL-Operationen.

Betrachten Sie das bereitgestellte Beispiel:

DECLARE @tbl TABLE ( 
      Id INT 
    , [Name] VARCHAR(20) 
    , ParentId INT 
);
Nach dem Login kopieren

Zeile 1-2: Definieren Sie die Tabelle Struktur.

Zeile 3-16: Datensätze in die einfügen Tabelle.

Zeile 19-24: Definieren Sie den rekursiven CTE abcd.

Zeile 19: Der Ankerausdruck definiert die anfängliche Iteration des CTE durch Auswahl von Datensätzen, bei denen ParentId NULL ist.

Zeile 20-22: Der rekursive Ausdruck erweitert den CTE, indem er untergeordnete Datensätze auswählt und deren Namen mit dem Pfad des übergeordneten Elements in der Spalte „Pfad“ verkettet.

Zeile 25: Wählen Sie aus dem CTE abcd aus um das Endergebnis abzurufen.

Ausführung Schritte:

1.Führen Sie den Ankerausdruck (Zeile 19) aus, der das folgende Ergebnis zurückgibt:

Id Name ParentId Path
1 Europe NULL Europe
2 Asia NULL Asia

2. Führen Sie den rekursiven Ausdruck (Zeile 20-22) mit dem Ergebnis des Ankerausdrucks aus. Dies ergibt:

Id Name ParentId Path
3 Germany 1 Europe/Germany
4 UK 1 Europe/UK
5 China 2 Asia/China
6 India 2 Asia/India

3. Wiederholen Sie Schritt 2, bis keine weiteren untergeordneten Datensätze gefunden werden, was zu:

Id Name ParentId Path
7 Scotland 4 Europe/UK/Scotland
8 Edinburgh 7 Europe/UK/Scotland/Edinburgh
9 Leith 8 Europe/UK/Scotland/Edinburgh/Leith

4. Vereinigen Sie alle Ergebnisse jeder Iteration, um das Endergebnis zu erhalten, das in der SELECT-Anweisung angezeigt wird (Zeile 25).

Warum der Anker nicht wiederholt wird:

Der Ankerausdruck definiert den anfänglichen Startpunkt für die Rekursion. Obwohl er in jeder Iteration ausgeführt wird, unterscheidet er sich vom rekursiven Ausdruck, der die Ergebnismenge erweitert. Somit werden die Ankerdatensätze nur einmal einbezogen.

Das obige ist der detaillierte Inhalt vonWie werden rekursive CTEs Zeile für Zeile ausgeführt: Eine Schritt-für-Schritt-Erklärung?. 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