Rumah > pangkalan data > tutorial mysql > Bagaimanakah CTE Rekursif Melaksanakan Langkah demi Langkah?

Bagaimanakah CTE Rekursif Melaksanakan Langkah demi Langkah?

Patricia Arquette
Lepaskan: 2025-01-01 09:31:09
asal
350 orang telah melayarinya

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

Bagaimanakah CTE Rekursif Berjalan, Baris demi Baris?

CTE Rekursif, seperti UNION ALL yang tidak berkesudahan, terdiri daripada huruf asas dan berbilang panggilan rekursif. Pertimbangkan perkara berikut:

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
…
Salin selepas log masuk

Dalam contoh yang disediakan:

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
Salin selepas log masuk

Setiap lelaran penambat menghasilkan panggilan rekursif baharu, mencipta satu set lapisan bersarang. Sauh dipanggil sekali, berfungsi sebagai titik permulaan. Lelaran seterusnya menggunakan hasil panggilan sebelumnya untuk mengisi ahli rekursif.

Memandangkan abcd6 tidak mengembalikan hasil, ia membayangkan keadaan berhenti. Secara teorinya, CTE rekursif boleh menjadi tidak terhingga, tetapi SQL Server menguatkuasakan had untuk menghalang set rekod tak terhingga.

Rujuk artikel berikut untuk mendapatkan cerapan lanjut:

  • [SQL Server: adalah rekursif CTE sungguh berasaskan set?](https://www.sqlshack.com/sql-server-recursive-ctes-really-set-based/)

Atas ialah kandungan terperinci Bagaimanakah CTE Rekursif Melaksanakan Langkah demi Langkah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan