Выражение WITH
Выражение WITH позволяет указать общие табличные выражения (CTE).
Регулярные (нерекурсивные) общие табличные выражения — это, по сути, представления (view), которые ограничены рамками конкретного запроса.
CTE могут ссылаться друг на друга и быть вложенными.
Синтаксис
[ WITH
<cte_name1> [ ( <cte_column_list> ) ] AS ( SELECT ... )
[ , <cte_name2> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
[ , <cte_nameN> [ ( <cte_column_list> ) ] AS ( SELECT ... ) ]
]
SELECT ...
Примеры
Создадим CTE с именем cte и используем его в основном запросе:
WITH cte AS (SELECT 33 AS amount)
SELECT * FROM cte;
+--------+
| amount |
+--------+
| 33 |
+--------+
Создадим два CTE cte1 и cte2, где второй CTE ссылается на первый CTE:
WITH
cte1 AS (SELECT 33 AS i),
cte2 AS (SELECT i * 2 AS amount_doubled FROM cte1)
SELECT * FROM cte2;
+----------------+
| amount_doubled |
+----------------+
| 66 |
+----------------+
Для столбцов CTE можно задавать имена:
WITH my_cte(amount) AS (SELECT 33 AS i)
SELECT * FROM my_cte;
+--------+
| amount |
+--------+
| 33 |
+--------+