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. 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: Một recursive CTE gồm 3 phần chính:
Thứ tự thực thi của một recursive CTE như sau:
Hạn chế của Recursive memberRecursive member bắt buộc không gồm các thành phần sau:
Các ràng buộc trên không áp dụng cho anchor member. Ngoài ra 2 sẽ không được phép sử dụng khi bạn dùng 4, còn trong trường hợp bạn dùng UNION DISTINCT thì 2 được phép sử dụng.Ngoải ra, recursive member chỉ có thể tham chiếu tới CTE một lần và từ mệnh đề 7 chứ không phải từ subquery.Simple MySQL recursive CTE exampleSee the following simple recursive CTE example:
Ở ví dụ này, để ý truy vấn: là 1 anchor member trả về giá trị 1 và được set là kết quả ban đầu. Truy vấn
là recursive member vì nó tham chiếu tới tên của CTE là 8.Biểu thức 9 trong recursive member là điều kiện để kết thúc lặp đệ quy. Nếu 0 thì recursive member trả về một tập hợp rỗng và sẽ dừng đệ quy.Mô tả các thành phần của CTE ở trên: Kết quả: Các bước thực thi recursive CTE như sau:
Sử dụng MySQL recursive CTE để duyệt dữ liệu phân cấpChúng ta sẽ sử dụng bảng 3 trong database 4 cho ví dụ này:Bảng 3 có cột 6 tham chiếu tới cột 7. Cột 6 lưu các id của các quản lý. Top manager không phải báo cáo cho bất kỳ ai cho nên giá trị 6 là 0.Bạn có thể áp dụng recursive CTE để truy vấn toàn bộ cấu trúc của tổ chức theo cách từ trên xuống như sau:
Để dễ hiểu hơn, ta sẽ chia nhỏ các truy vấn ra. Đầu tiên, tạo ra anchor member:
Câu truy vấn này (anchor member) trả về top manager với 6 is 0.Thứ 2, tạo ra recursive member ( 3) bằng việc tham chiếu tới CTE:
Truy vấn này ( recursive member) trả về tất cả các báo cáo trực tiếp của manager tới khi không còn báo cáo trực tiếp nữa. Khi đó recursion sẽ dừng lại. Thứ 3, CTE 3 kết hợp tập kết quả được trả về bởi CTE với bảng 5 để tạo ra tập kết quả cuối cùng.Kết quả: Các bước thực thi recursive CTE như sau: |