CTE Rekursif untuk Hierarki
Telusuri data berhierarki (carta organisasi, komen berjujukan, traversal graf) dengan WITH RECURSIVE dan syarat penghentian.
CTE Rekursif untuk Hierarki ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Mengapakah Rekursif
SQL biasa tidak boleh merentasi pepohon yang kedalamannya tidak diketahui: ibu bapa kepada ibu bapa, anak kepada anak. CTE rekursif ialah penyelesaian SQL standard.
Anatomi
CTE rekursif mempunyai dua bahagian yang disambungkan oleh UNION ALL:
WITH RECURSIVE name AS (
-- 1. Anchor query: seed rows
SELECT ...
UNION ALL
-- 2. Recursive step: references the CTE itself
SELECT ...
FROM name JOIN ...
)
SELECT * FROM name;Merentasi Carta Organisasi
Cari semua pekerja yang melaporkan (secara langsung atau tidak langsung) kepada pengurus tertentu:
WITH RECURSIVE reports AS (
-- anchor: the manager themself
SELECT id, full_name, manager_id, 0 AS depth
FROM employees WHERE id = 42
UNION ALL
-- recurse: people whose manager is in reports
SELECT e.id, e.full_name, e.manager_id, r.depth + 1
FROM employees e
JOIN reports r ON r.id = e.manager_id
)
SELECT * FROM reports ORDER BY depth, full_name;Komen Berutas
Merentasi pepohon perbincangan bermula daripada akar:
WITH RECURSIVE thread AS (
SELECT id, parent_id, body, 0 AS depth, ARRAY[id] AS path
FROM comments WHERE id = $1
UNION ALL
SELECT c.id, c.parent_id, c.body, t.depth + 1, t.path || c.id
FROM comments c
JOIN thread t ON c.parent_id = t.id
)
SELECT * FROM thread ORDER BY path;Penamatan
Rekursi berhenti apabila langkah rekursif tidak mengembalikan baris baharu.
Mengelakkan Gelung Tidak Berkesudahan
Jika graf anda mempunyai kitaran, jejaki nod yang telah dilawati:
WITH RECURSIVE walk AS (
SELECT id, ARRAY[id] AS path FROM nodes WHERE id = $1
UNION ALL
SELECT e.target_id, w.path || e.target_id
FROM edges e
JOIN walk w ON e.source_id = w.id
WHERE e.target_id <> ALL(w.path)
)
SELECT * FROM walk;Siri Berangka
CTE rekursif juga boleh menjana jujukan:
WITH RECURSIVE n(i) AS (
VALUES (1)
UNION ALL
SELECT i + 1 FROM n WHERE i < 100
)
SELECT i, i*i AS square FROM n;Senarai Bahan
Kembangkan produk kepada semua komponennya, termasuk subpemasangan:
WITH RECURSIVE bom AS (
SELECT part_id, sub_part_id, qty FROM parts WHERE part_id = $1
UNION ALL
SELECT p.part_id, p.sub_part_id, p.qty * bom.qty
FROM parts p
JOIN bom ON bom.sub_part_id = p.part_id
)
SELECT sub_part_id, SUM(qty) AS total_qty FROM bom GROUP BY sub_part_id;Had Kedalaman
Untuk keselamatan, hadkan kedalaman rekursi:
WITH RECURSIVE tree AS (
SELECT id, parent_id, 0 AS depth FROM nodes WHERE id = $1
UNION ALL
SELECT n.id, n.parent_id, t.depth + 1
FROM nodes n JOIN tree t ON n.parent_id = t.id
WHERE t.depth < 10
)
SELECT * FROM tree;UNION berbanding UNION ALL
UNION ALL ialah pilihan yang lazim. UNION membuang pendua — berguna apabila sesuatu nod boleh dicapai melalui beberapa laluan.
Prestasi
CTE rekursif dinilai secara berlelar. "Jadual kerja" setiap langkah ialah baris yang dihasilkan oleh langkah sebelumnya. Indekskan lajur JOIN.
Imbas Kembali
CTE rekursif merentasi hierarki dan graf.
- Sauh + UNION ALL + langkah rekursif
- Berhenti apabila langkah rekursif tidak mengembalikan baris
- Gunakan tatasusunan laluan untuk memutuskan kitaran
Semakan Pantas
Kata kunci apakah yang menjadikan CTE sebagai CTE rekursif?
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 46
- Pelajaran
- 183
Soalan Lazim
Adakah pelajaran “CTE Rekursif untuk Hierarki” percuma?
Ya — teks penuh “CTE Rekursif untuk Hierarki” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “CTE Rekursif untuk Hierarki”?
Telusuri data berhierarki (carta organisasi, komen berjujukan, traversal graf) dengan WITH RECURSIVE dan syarat penghentian. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “CTE Rekursif untuk Hierarki” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Subpertanyaan Skalar, Baris dan Jadual
- Subpertanyaan Berkorelasi berbanding Tidak Berkorelasi
- Ungkapan Jadual Biasa (WITH)
- CTE Rekursif untuk Hierarki