Коррелированные подзапросы

Базовый SQL
≈ 1 мин чтения

Коррелированный подзапрос зависит от внешней строки

Обычный независимый подзапрос можно понять отдельно от внешнего запроса. Коррелированный подзапрос ссылается на столбцы текущей строки внешней выборки, поэтому его смысл меняется вместе с этой строкой.

SELECT u.id, u.name
FROM users AS u
WHERE EXISTS (
    SELECT 1
    FROM orders AS o
    WHERE o.user_id = u.id
      AND o.status = 'PAID'
);

Ссылка u.id приходит из внешнего запроса. Для каждого пользователя внутренний запрос проверяет именно его оплаченные заказы.

Читай корреляцию как параметр внутреннего запроса

Полезная мысленная модель: текущая строка внешнего запроса передаёт значение во внутреннюю выборку. Тогда условие вроде o.user_id = u.id становится понятной связью между уровнями.

Коррелированный подзапрос требует особенно внимательно читать псевдонимы. Всегда отмечай, какой алиас принадлежит внешнему запросу, а какой — внутреннему. Иначе легко потерять направление зависимости.