WITH RECURSIVE · cây categories
CTE đệ quy chạy từng vòng cho tới khi không còn dòng mới
CTE đệ quy duyệt cây categories theo từng vòng
Phần neo lấy 4 danh mục gốc, vòng 1 JOIN ra 7 danh mục con, vòng 2 ra 2 danh mục cháu, vòng 3 không còn dòng nào nên dừng; UNION ALL gom lại đủ 13 danh mục.
MỖI VÒNG CHỈ JOIN VỚI CÁC DÒNG VÒNG NGAY TRƯỚC VỪA SINH RA
PHẦN NEO
Vòng 0
parent_id IS NULL
Máy tính
Điện thoại & Tablet
Phụ kiện
Thiết bị mạng
4 dòng mới
PHẦN ĐỆ QUY
Vòng 1
con của vòng 0
Laptop
PC & Màn hình
Điện thoại
Máy tính bảng
Chuột & Bàn phím
Tai nghe & Loa
Sạc & Cáp
7 dòng mới
PHẦN ĐỆ QUY
Vòng 2
con của vòng 1
Laptop gaming
Laptop văn phòng
2 dòng mới
PHẦN ĐỆ QUY
Vòng 3
con của vòng 2
Không danh mục nào có
parent_id là 3 hoặc 4
Bảng tạm rỗng
→ dừng đệ quy
0 dòng mới
JOIN
JOIN
JOIN
UNION ALL gom kết quả mọi vòng
4 + 7 + 2 = 13 dòng = cả 13 danh mục
Dữ liệu có vòng lặp:
bảng tạm không bao giờ
rỗng, phải chặn
© tiennhm