5

用外行的话来说,WITH子句和临时表之间的主要区别是什么?

在哪种情况下使用一个比另一个更好?

4

2 回答 2

6

WITH子句通常在选择查询中使用,当您必须对几个包含复杂子句的子查询HAVING(尽管不一定)执行某些连接时。一般来说,WITH从句只能用在SELECT语句中。

但是在必须操作数据的情况下,这意味着您想在某些条件下更改数据,甚至想根据您希望使用的某些复杂条件再次删除某些行TEMP TABLE。虽然大多数情况下WITH它通常会以一些复杂的逻辑为代价来实现,但在TEMP表中您可以有几个不同的 SQL 语句来实现相同的目的。

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

虽然TEMP表仅在当前会话中是瞬态的,但WITH始终会重新评估。

于 2017-09-26T09:21:29.020 回答
1

主要区别在于临时表是存储表。CTE 更类似于视图,并帮助您以更易于阅读、更合乎逻辑的方式表达您的 SQL。表和视图之间存在相同的差异,因为表使您有可能以高性能的方式做事。

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

于 2017-09-26T09:32:08.113 回答