Mid #subquery#cte#recursive
Subquery và CTE (WITH) khác nhau thế nào?
⚡ Trả lời nhanh
Subquery lồng trong câu lệnh chính; CTE (WITH) đặt tên cho tập kết quả tạm, giúp câu truy vấn dễ đọc, tái sử dụng trong cùng câu lệnh và hỗ trợ đệ quy. Hiệu năng thường tương đương, tuỳ optimizer có inline hay materialize CTE.
WITH monthly AS (
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE created_at >= '2025-01-01'
GROUP BY user_id
)
SELECT u.name, m.revenue
FROM monthly m JOIN users u ON u.id = m.user_id
WHERE m.revenue > 1000;
-- CTE đệ quy: duyệt cây danh mục
WITH RECURSIVE tree AS (
SELECT id, parent_id FROM categories WHERE id = 1
UNION ALL
SELECT c.id, c.parent_id FROM categories c JOIN tree t ON c.parent_id = t.id
)
SELECT * FROM tree;