Heim > Datenbank > MySQL-Tutorial > Wie wird ein rekursiver CTE Schritt für Schritt ausgeführt?

Wie wird ein rekursiver CTE Schritt für Schritt ausgeführt?

Patricia Arquette
Freigeben: 2025-01-01 09:31:09
Original
367 Leute haben es durchsucht

How Does a Recursive CTE Execute Step-by-Step?

Wie läuft ein rekursiver CTE Zeile für Zeile ab?

Rekursive CTEs bestehen wie endlose UNION ALLs aus einem Basisfall und einem Vielfachen rekursive Aufrufe. Bedenken Sie Folgendes:

WITH    rows AS
        (
        SELECT  *
        FROM    mytable
        WHERE   anchor_condition
        ),
        rows2 AS
        (
        SELECT  *
        FROM    set_operation(mytable, rows)
        ),
        rows3 AS
        (
        SELECT  *
        FROM    set_operation(mytable, rows2)
        ),
        …
SELECT  *
FROM    rows
UNION ALL
SELECT  *
FROM    rows2
UNION ALL
SELECT  *
FROM    rows3
UNION ALL
…
Nach dem Login kopieren

Im bereitgestellten Beispiel:

WITH    abcd1 AS
        ( 
        SELECT  *
        FROM    @tbl t
        WHERE   ParentId IS NULL 
        ),
        abcd2 AS
        ( 
        SELECT  t.*
        FROM    abcd1
        JOIN    @tbl t
        ON      t.ParentID = abcd1.id
        ),
        abcd3 AS
        ( 
        SELECT  t.*
        FROM    abcd2
        JOIN    @tbl t
        ON      t.ParentID = abcd2.id
        ),
        abcd4 AS
        ( 
        SELECT  t.*
        FROM    abcd3
        JOIN    @tbl t
        ON      t.ParentID = abcd3.id
        ),
        abcd5 AS
        ( 
        SELECT  t.*
        FROM    abcd4
        JOIN    @tbl t
        ON      t.ParentID = abcd4.id
        ),
        abcd6 AS
        ( 
        SELECT  t.*
        FROM    abcd5
        JOIN    @tbl t
        ON      t.ParentID = abcd5.id
        )
SELECT  *
FROM    abcd1
UNION ALL
SELECT  *
FROM    abcd2
UNION ALL
SELECT  *
FROM    abcd3
UNION ALL
SELECT  *
FROM    abcd4
UNION ALL
SELECT  *
FROM    abcd5
UNION ALL
SELECT  *
FROM    abcd6
Nach dem Login kopieren

Jede Ankeriteration führt zu einem neuen rekursiven Aufruf, wodurch eine Reihe verschachtelter Ebenen erstellt wird. Der Anker wird einmal aufgerufen und dient als Ausgangspunkt. Nachfolgende Iterationen verwenden die Ergebnisse früherer Aufrufe, um das rekursive Mitglied zu füllen.

Da abcd6 keine Ergebnisse zurückgibt, impliziert dies eine Stoppbedingung. Theoretisch können rekursive CTEs unendlich sein, aber SQL Server erzwingt eine Begrenzung, um unendliche Recordsets zu verhindern.

Weitere Einblicke finden Sie im folgenden Artikel:

  • [SQL Server: sind die rekursiven CTE ist wirklich satzbasiert?](https://www.sqlshack.com/sql-server-recursive-ctes-really-set-based/)

Das obige ist der detaillierte Inhalt vonWie wird ein rekursiver CTE Schritt für Schritt ausgeführt?. 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