WITH
Позволяет создавать табличные выражения. Табличные выражения — это временные таблицы, существующие только для одного запроса. Их основное предназначение заключается в разбиении сложных запросов на несколько частей.
Табличные выражения создаются так:
WITH
subquery_1 AS (
SELECT column_1, column_2
FROM table
)
SELECT column_1
FROM subquery_1
Оператор WITH может содержать несколько табличных выражений, причём к указанным ранее выражениям можно обращаться в последующих выражениях:
WITH
subquery_1 AS (
SELECT column_1, column_2, column_3
FROM table
),
subquery_2 AS (
SELECT column_1, column_2
FROM subquery_1
)
SELECT column_1
FROM subquery_2
На заметку:
WITH
subquery AS (
SELECT MAX(column_2)
FROM table_2
)
SELECT column_1
FROM table_1
WHERE column_1 = (SELECT * FROM subquery)
Обратите внимание на запись со «звёздочкой». Дело в том, что обратиться к этим «переменным» просто по имени табличного выражения не получится — придётся отдельным подзапросом из табличного выражения выбрать рассчитанное значение. Самый простой вариант — написать подзапрос с SELECT * из табличного выражения.