Rumah >pangkalan data >tutorial mysql >Bagaimanakah CTE Rekursif Berfungsi Langkah demi Langkah?
Pecahan Pelaksanaan CTE Rekursif
CTE Rekursif mengikut proses pelaksanaan langkah demi langkah yang akhirnya menghasilkan set hasil yang diingini. Mari kita pecahkan setiap langkah baris demi baris untuk pemahaman yang lebih baik.
DENGAN abcd AS (
Baris ini mengisytiharkan CTE rekursif bernama "abcd." Ia berfungsi sebagai jadual sementara yang mengumpul keputusan.
-- sauh
Pernyataan pilihan pertama bertindak sebagai sauh, memilih baris yang memenuhi syarat sauh Dalam kes ini, ia mengambil baris daripada @tbl dengan null ParentID ini menghasilkan populasi awal ". abcd" CTE.
PILIH id, Nama, ParentID, CAST(Nama AS VARCHAR(1000)) AS Path
Barisan ini mengekstrak ID, Nama, ParentID dan lajur yang dikira "Laluan" yang pada mulanya hanya mengandungi Nama baris.
FROM @tbl
Data datang daripada jadual sementara @tbl.
WHERE ParentId IS NULL
Syarat ini menapis baris di mana ParentID adalah batal, dengan berkesan memilih baris peringkat atas.
UNION ALL
Pengendali ini menggabungkan penyataan pilih anchor dengan ahli rekursif.
--ahli rekursif
Pernyataan pilih kedua membentuk ahli rekursif, yang melakukan lelaran berdasarkan penambat.
PILIH t.id, t.Name, t.ParentID, CAST((a.path '/' t.Name) AS VARCHAR(1000)) AS "Path"
Baris ini mendapatkan ID, Name, ParentID dan lajur diubah suai "Path" yang menggabungkan "Path" induk dengan baris semasa Nama.
DARI @tbl AS t
Data datang daripada jadual sementara @tbl, alias sebagai "t."
SERTAI abcd SEBAGAI a
Gabungan ini memautkan baris dalam "t" dengan baris dalam CTE "abcd" sedia ada menggunakan ParentID lajur.
ON t.ParentId = a.id
Syarat gabungan memastikan baris anak dipadankan dengan baris induknya.
PILIH * DARI abcd
Akhir sekali, pernyataan ini mengembalikan set keputusan penuh daripada CTE rekursif, termasuk semua lelaran.
Atas ialah kandungan terperinci Bagaimanakah CTE Rekursif Berfungsi Langkah demi Langkah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!