用外行的话来说,WITH子句和临时表之间的主要区别是什么?
在哪种情况下使用一个比另一个更好?
用外行的话来说,WITH子句和临时表之间的主要区别是什么?
在哪种情况下使用一个比另一个更好?
WITH
子句通常在选择查询中使用,当您必须对几个包含复杂子句的子查询HAVING
(尽管不一定)执行某些连接时。一般来说,WITH
从句只能用在SELECT
语句中。
但是在必须操作数据的情况下,这意味着您想在某些条件下更改数据,甚至想根据您希望使用的某些复杂条件再次删除某些行TEMP TABLE
。虽然大多数情况下WITH
它通常会以一些复杂的逻辑为代价来实现,但在TEMP
表中您可以有几个不同的 SQL 语句来实现相同的目的。
此外,TEMP
表通常用作临时表而不是SELECT
查询视图,即TEMP
当您要从中加载大量数据时使用表S3
,您可能希望将数据加载到临时表中,分析数据,删除冗余,最后一次将其合并到原始表中。
虽然TEMP
表仅在当前会话中是瞬态的,但WITH
始终会重新评估。
主要区别在于临时表是存储表。CTE 更类似于视图,并帮助您以更易于阅读、更合乎逻辑的方式表达您的 SQL。表和视图之间存在相同的差异,因为表使您有可能以高性能的方式做事。
如果您正在构建一个非常复杂的查询或需要分阶段构建的查询,WITH 子句/CTE 将帮助您做到这一点。但是,如果您希望将数据存储在表中以提高性能,那么临时表将是您的最佳选择。同样,临时表可以反复使用,因此如果您在多个查询中使用相同的代码,您可能会考虑使用临时表而不是 CTE。