Содержание

Обобщенные табличные выражения (CTE)

Табличные выражение являются очень удобной структурой в SQL-запросе и помогают существенно упростить как сам запрос, так и его дальнейшую поддержку. Табличные выражения можно назвать анаголом временных таблиц, актуальных только в рамках одного запроса.

В табличных выражениях может быть как SELECT, так и модификация данных - INSERT, UPDATE или DELETE.

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

Каждое табличное выражение имеет имя и может определять имена возвращаемых полей. После определения табличных выражений должен следовать основной запрос, которые может использовать результат определенных ранее табличных выражение, но не обязан это делать. Все табличные выражение в запросе выполняются параллельно (если они не зависят друг от друга), но в рамках одного снапшота. Поэтому выполнение изменения таблицы в одном выражении и чтение из этой же таблицы в другом выражении может привести к неожиданным результат. Так же как и параллельное изменение одной и той же таблицы в двух выражениях.

Рекурсивные

Using RECURSIVE, a WITH query can refer to its own output.

Note: Strictly speaking, this process is iteration not recursion, but RECURSIVE is the terminology chosen by the SQL standards committee.

it is important to be sure that the recursive part of the query will eventually return no tuples

ou can use data-modifying statements (INSERT, UPDATE, or DELETE)

This is necessary because data-modifying statements are only allowed in WITH clauses that are attached to the top-level statement.

Recursive self-references in data-modifying statements are not allowed.

The sub-statements in WITH are executed concurrently with each other and with the main query.

Therefore, when using data-modifying statements in WITH, the order in which the specified updates actually happen is unpredictable.

comments powered by Disqus