Menu
CoddyTech

Duyệt qua hệ phân cấp

Thuộc phần Vượt ra ngoài kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 21 trên 27.

Lý do thực sự khiến CTE đệ quy tồn tại: lần theo mối quan hệ cha/con được lưu trong một bảng duy nhất. Giả sử employees có cột manager_id trỏ ngược lại vào chính bảng đó:

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- điểm bắt đầu: nhân viên đầu tiên
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- đệ quy: chuyển đến người quản lý
)
SELECT * FROM chain

Mỗi bước nối CTE trở lại với employees, đi lên một cấp trong cây. Đệ quy tự dừng khi một hàng không có người quản lý nào (JOIN không khớp với hàng nào).

challenge icon

Thử thách

Trung bình

Các bảng và cột hiện có:

  • categories: id, name, parent_id

Mỗi danh mục có thể có một parent_id trỏ đến một danh mục khác. Trả về tất cả danh mục là hậu duệ của danh mục id = 1 (con, cháu, …) nhưng không bao gồm chính danh mục 1. Trả về id và name, sắp xếp theo id.

Tự làm thử

WITH RECURSIVE descendants AS (
    -- phần gốc: các nút con trực tiếp của id 1
    -- phần đệ quy: các nút con của chúng, v.v.
)
SELECT id, name FROM descendants ORDER BY id
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Vượt ra ngoài kiến thức cơ bản

Tự luyện tập: Playground SQL