Какая разница между предложением WITH и временной таблицей?
С точки зрения непрофессионала, какие будут основные различия между предложением WITH и временной таблицей?
В каком сценарии лучше использовать один над другим?
2 ответа
WITH
Предложение обычно используется в запросе выбора, когда вам нужно выполнить какое-то объединение в паре подзапросов, которые содержат сложные предложения, такие как HAVING
(хотя и не обязательно). Вообще говоря WITH
пункт может быть использован только в SELECT
заявление.
Но в случае, когда с данными нужно манипулировать, то есть вы хотите изменить данные на какое-то условие или даже хотели бы снова удалить несколько строк в зависимости от какого-то сложного условия, с которым вам хотелось бы работать TEMP TABLE
, Хотя большинство случаев будет достигнуто WITH
это обычно происходит за счет некоторой сложной логики, в TEMP
В таблице можно использовать несколько разных операторов SQL для достижения того же.
Также, TEMP
Таблица обычно используется как промежуточная таблица, а не как представление для SELECT
запрос т.е. TEMP
таблица используется, когда вы хотите загрузить тонны данных из S3
Вы можете загрузить данные во временную таблицу, проанализировать данные, удалить избыточность и, наконец, объединить их в исходную таблицу за один раз.
В то время как TEMP
таблица является переходной только для текущего сеанса, WITH
всегда переоценивается.
Основное отличие состоит в том, что временная таблица является сохраненной таблицей. CTE больше похож на представление и помогает вам выразить ваш SQL в более понятном и логичном виде. Те же различия применимы к таблицам и представлениям в том смысле, что таблица дает вам возможность действовать эффективно.
Если вы строите очень сложный запрос или запрос, который нужно строить поэтапно, предложение WITH /CTE поможет вам в этом. Однако, если вы хотите сохранить данные в таблице для повышения производительности, лучшим выбором будет временная таблица. Точно так же временную таблицу можно использовать снова и снова, поэтому, если у вас был один и тот же код, использованный в нескольких запросах, вы могли бы рассмотреть временную таблицу, а не CTE.