簡體   English   中英

DB2帶條款

[英]DB2 With Clause

我是DB2的新手,我對with子句有疑問。 例如在以下查詢中:

WITH values AS 
   (
      SELECT user_id, user_data FROM USER WHERE user_age < 20
   )       
SELECT avg(values.user_data) FROM values
UNION
SELECT sum(values.user_data) FROM values

公用表表達式將執行多少次? with子句的結果將存儲在臨時表中還是對其進行兩次子選擇。 (我在這里使用with和union只是為了舉一個例子,對不起我的英語不好)

正如@Vladimir Oselsky所提到的,僅查看執行計划將為您提供明確的答案。 在這個人為的示例中,CTE子選擇可能會運行兩次。

在DB2中,公用表表達式應​​在執行計划中創建“公用表表達式”節點(請參見此處的文檔)。 該節點明確表示:

它們充當中間表。 傳統上,嵌套表表達式也可以實現此目的。 但是,公用表表達式在實例化后可以被多次引用。 嵌套表表達式不能。

我讀這句話的意思是CTE僅被評估一次,實例化然后多次使用。 同樣,如果僅引用CTE一次,則“實例”將被優化。

請注意,這是Postgres處理CTE(實例化子查詢)的方式,而不是SQL Server處理它們的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM