2017-09-26 238 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。