Rumah > pangkalan data > tutorial mysql > Bagaimanakah CTE Rekursif Melaksanakan Baris demi Baris dalam Pelayan SQL?

Bagaimanakah CTE Rekursif Melaksanakan Baris demi Baris dalam Pelayan SQL?

Mary-Kate Olsen
Lepaskan: 2024-12-30 09:52:10
asal
367 orang telah melayarinya

How Does a Recursive CTE Execute Line by Line in SQL Server?

Pelaksanaan Baris demi Baris CTE Rekursif

Ungkapan Jadual Biasa Rekursif (CTE) selalunya sukar untuk difahami, tetapi ia boleh difahami dengan memecahkan baris pelaksanaan mereka dengan baris.

Anchor

SELECT  id, Name, ParentID, CAST(Name AS VARCHAR(1000)) AS Path
FROM    @tbl
WHERE   ParentId IS NULL
Salin selepas log masuk
  • Anchor memilih nod peringkat atas, di mana ParentId ialah NULL.
  • Ia menayangkan lajur berikut: id, Nama, ParentID dan lajur Laluan yang dimulakan dengan nod nama.

Ahli Rekursif

SELECT  t.id, t.Name, t.ParentID, CAST((a.path + '/' + t.Name) AS VARCHAR(1000)) AS "Path"
FROM    @tbl AS t
JOIN    abcd AS a
ON      t.ParentId = a.id
Salin selepas log masuk
  • Ahli rekursif memilih nod anak dengan menyertai jadual sementara abcd dengan @tbl berdasarkan ParentId.
  • Ia menambahkan nama nod anak kepada ibu bapa Laluan.

Kesatuan Tanpa Kesudahan SEMUA

Fikirkan CTE rekursif sebagai UNION ALL tanpa henti yang berkembang secara mendatar, menambah tahap hierarki baharu dengan setiap lelaran. Contohnya, abcd2 akan menyertakan nod anak abcd1, abcd3 akan menyertakan nod anak abcd2 dan seterusnya.

Setiap Lelaran

  • Sauh tidak pernah dilangkau dalam lelaran kemudian. Ia sentiasa memilih nod peringkat atas.
  • Ahli rekursif menyertai nod anak ke nod yang dipilih sebelum ini, mewujudkan struktur hierarki.
  • Semasa setiap lelaran berlangsung, lajur Laluan dikemas kini untuk mencerminkan hubungan ibu bapa-anak yang betul.

Berhenti Keadaan

Secara teorinya, CTE rekursif boleh berjalan tanpa had. Walau bagaimanapun, SQL Server menghalang set rekod tak terhingga dengan melaksanakan keadaan berhenti. Apabila ahli rekursif gagal menghasilkan sebarang baris baharu, lelaran berhenti.

Dalam contoh ini, apabila ahli rekursif gagal mencari nod anak untuk tahap abcd6, lelaran tamat.

Keputusan Akhir

Keputusan akhir ialah pokok hierarki lengkap, bermula dengan nod peringkat atas dan berkembang ke peringkat terendah. Lajur Path menyediakan laluan penuh kepada setiap nod dalam hierarki.

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

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