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