Pelajaran 32 / 37 · Menyusun query
CTE rekursif berjalan per putaran
Anchor menemukan satu-satunya karyawan yang tidak punya atasan. Setiap putaran berikutnya mencari karyawan yang atasannya ditemukan di putaran sebelumnya, satu tingkat lebih ke bawah. Rekursi berhenti saat sebuah putaran tidak menemukan siapa pun. Kolom putaran menunjukkan di putaran mana setiap baris ditambahkan.
Query-nya
WITH RECURSIVE chain AS (
SELECT id, name, 1 AS level
FROM employees
WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, c.level + 1
FROM employees e
JOIN chain c ON c.id = e.manager_id
)
SELECT name, level
FROM chain
ORDER BY level, name
Coba WHERE c.level < 2 di bagian rekursif: putaran 2 tidak menemukan siapa pun untuk ditambahkan, dan rantainya berhenti di 4 baris.
Berikutnya: Window function melihat baris lain tanpa meringkasnya · Semua pelajaran