Hướng dẫn mysql recursive cte - mysql đệ quy cte

Bài viết này sẽ giới thiệu và hướng dẫn các bạn cách sử dụng MySQL recursive CTE để duyệt dữ liệu phân cấp.

Chú ý rằng common table expression [CTE] chỉ được sử dụng từ MySQL phiên bản 8.0. Do đó hãy chắc chắn là bạn cài đúng version của MySQL.

Introduction to MySQL recursive CTE

recursive common table expression [CTE] là 1 CTE có subquery mà tham chiếu tới chính bản thân CTE đó. Cú pháp của recursive CTE như sau:

WITH RECURSIVE cte_name AS [
    initial_query  -- anchor member
    UNION ALL
    recursive_query -- recursive member that references to the CTE name
]
SELECT * FROM cte_name;

Một recursive CTE gồm 3 phần chính:

  • Một initial query tạo ra kết quả dựa theo cấu trúc của CTE và được coi như một anchor member.
  • Một recursive query part là một truy vấn tham chiếu tới chính tên của CTE và được gọi là recursive member. Recursive member join với anchor member bằng toán tử UNION ALL hoặc UNION DISTINCT.
  • Một điều kiện để kết thúc đệ qui khi mà recursive member không trả về row nào cả.

Thứ tự thực thi của một recursive CTE như sau:

  1. Đầu tiên, tách biệt members thành 2: anchor và recursive members.
  2. Tiếp theo, thực thi anchor member để tạo ra kết quả và thiết lập nó [giả sử là R0] và sử dụng kết quả đó cho lặp kế tiếp.
  3. Sau đó, thực thi recursive member với đầu vào là Ri và tạo ra kết quả là
    WITH RECURSIVE cte_count [n] 
    AS [
          SELECT 1
          UNION ALL
          SELECT n + 1 
          FROM cte_count 
          WHERE n 

Bài Viết Liên Quan

Chủ Đề