WITH 子句和临时表有什么区别?



在外行术语中,条款&临时桌子?

在哪种情况下,最好使用一个方案?

WITH子句通常在选择查询中使用时,当您必须对几个包含复杂子句(例如HAVING)的子查询执行一些加入(尽管不一定是)。一般而言,WITH子句只能在SELECT语句中使用。

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

另外,TEMP表通常用作登台表,而不是SELECT查询的视图,即当您想从S3加载大量数据时,使用TEMP表,您可能想将数据加载到temp表中,分析,分析数据,删除冗余,最后将其合并到原始表中。

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

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

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

最新更新