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 );
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!