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