CTEs vs JOINS
Original Version (with JOINs)
JOINs)SELECT SUM(quantity)
FROM invoices
JOIN invoice_items USING (invoice_number)
JOIN products USING (product_id)
WHERE product_description = 'super cool product'
AND invoices.issue_date BETWEEN '2024-01-01' AND '2024-02-01';Improved Version (using CTEs)
WITH relevant_product_ids AS (
SELECT product_id
FROM products
WHERE product_description = 'super cool product'
),
relevant_invoice_lines AS (
SELECT invoice_number, quantity
FROM invoice_items
WHERE product_id IN (
SELECT product_id FROM relevant_product_ids
)
),
relevant_invoices AS (
SELECT invoice_number, issue_date
FROM invoices
WHERE invoice_number IN (
SELECT invoice_number FROM relevant_invoice_lines
)
)
SELECT SUM(quantity)
FROM relevant_invoices
JOIN relevant_invoice_lines USING (invoice_number)
WHERE issue_date BETWEEN '2024-01-01' AND '2024-02-01';When to Use This Pattern
Last updated

