2017-09-26 236 views
0

通俗地说,WITH子句&临时表的关键区别是什么?WITH子句和临时表有什么区别?

在哪种情况下最好使用另一种?

+0

主要区别:必须直接在关联的查询中使用with子句。使用临时表格,您可以在会话期间使用它们。所以,他们的寿命是不同的。 –

回答

2

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

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

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

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

0

主要区别在于临时表是存储的表。 CTE更类似于视图,并且可以帮助您以更易于阅读和更合乎逻辑的方式表达SQL。表和视图之间也有相同的区别,因为表格为您提供了以高性能方式执行任务的潜力。

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