ML Vault
All notes

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 * из табличного выражения.