WITH子句和&之间的区别是什么?临时表?

时间:2017-09-26 08:46:03

标签: sql amazon-redshift data-warehouse temp-tables with-clause

用外行人的话来说,WITH子句和&amp ;;之间的关键区别是什么?临时表?

在哪种情况下,最好使用一个而不是另一个?

2 个答案:

答案 0 :(得分:3)

WITH子句通常用于select查询,当你必须在包含复杂子句的几个子查询上执行某些连接时,如HAVING(尽管不一定)。一般来说,WITH子句只能用于SELECT语句。

但是在必须操纵数据的情况下,意味着您想要在某些条件下更改数据,或者甚至想要根据某些复杂条件再次删除某些行,您更愿意使用TEMP TABLE。尽管大多数情况都是由WITH实现的,但它通常需要付出一些复杂的逻辑,在TEMP表中,您可以使用几个不同的SQL语句来实现相同的目的。

此外,TEMP表通常用作临时表,而不是SELECT查询的视图,即当您要从{{1加载大量数据时使用TEMP表您可能希望将数据加载到临时表中,分析数据,删除冗余,最后一次将其合并到原始表中。

虽然S3表仅对当前会话是瞬态的,但始终会重新评估TEMP

答案 1 :(得分:0)

主要区别在于临时表是存储表。 CTE更类似于视图,可帮助您以更易于阅读,更符合逻辑的方式表达SQL。表和视图之间存在相同的差异,因为表格可以让您以高效的方式完成任务。

如果您正在构建一个非常复杂的查询或需要分阶段构建的查询,WITH子句/ CTE将帮助您实现这一目标。但是,如果您希望将数据存储在表中以提高性能,那么临时表将是您最好的选择。 同样,临时表可以反复使用,因此如果您在多个查询中使用相同的代码,则可以考虑使用临时表而不是CTE。