Skip to main content
Documents
Clauses StatementsKeywordsExpressionsFunctionsIndexesPerformance Optimization

MySQL LATERAL Clauses

The `LATERAL` clause in MySQL allows subqueries to reference columns from preceding tables in the `FROM` clause. It is particularly useful when you need to perform operations that depend on each row of a previous table.

Usage

The `LATERAL` clause is used in conjunction with subqueries to reference columns from tables mentioned earlier in the `FROM` clause. It is often used in complex queries where each row's data needs to be processed individually.

sql
SELECT column1, column2, ...
FROM table1,
LATERAL (SELECT ... FROM table2 WHERE table2.column = table1.column) AS alias_name;

In this syntax, the `LATERAL` subquery can access columns from `table1` to filter or compute results.

Examples

1. Basic LATERAL Usage

sql
SELECT e.employee_id, e.name, d.department_name
FROM employees e,
LATERAL (SELECT department_name FROM departments d WHERE d.department_id = e.department_id) AS dept;

This example demonstrates using `LATERAL` to fetch department names related to each employee based on a matching department ID.

2. LATERAL with Additional Filtering

sql
SELECT o.order_id, o.order_date, recent_p.product_name
FROM orders o,
LATERAL (SELECT product_name FROM products p WHERE p.product_id = o.product_id ORDER BY p.created_at DESC LIMIT 1) AS recent_p;

Here, `LATERAL` is used to select the most recently created product name associated with each order.

3. LATERAL with Aggregation

sql
SELECT c.customer_id, c.customer_name, top_selling.product_id, top_selling.total_sales
FROM customers c,
LATERAL (
    SELECT s.product_id, SUM(s.quantity) AS total_sales
    FROM sales s
    WHERE s.customer_id = c.customer_id
    GROUP BY s.product_id
    ORDER BY total_sales DESC
    LIMIT 1
) AS top_selling;

The `LATERAL` clause helps determine the top-selling product for each customer by aggregating sales data.

Compatibility and Version Support

The `LATERAL` clause is supported in MySQL versions 8.0 and later. Ensure your MySQL version is compatible before using this feature, as earlier versions do not support `LATERAL`.

Tips and Best Practices

  • Optimize subqueries. Ensure that lateral subqueries are optimized for performance, especially in large datasets.
  • Use with care. LATERAL can be resource-intensive; use it when necessary and consider alternatives if performance is an issue.
  • Combine with indexes. Ensure that indexed columns are used within the `LATERAL` subquery to enhance query performance.
  • Apply complex logic. Use `LATERAL` when you need to apply complex logic that depends on each row of the preceding table.
  • Understand performance implications. Be aware that `LATERAL` may lead to performance overhead with complex or large subqueries. Consider query plans and optimizations.
  • Differentiate from JOIN. Unlike `JOIN`, which combines rows based on a condition, `LATERAL` allows subqueries to access columns from preceding tables, making it suitable for scenarios where each row needs individual processing.

SQL Upskilling for Beginners

Gain the SQL skills to interact with and query your data.
Start Learning for Free