使用公共表達式 (CTE) 更新記錄
使用 CTE 更新表記錄時,請務必注意 CTE 的性質。 CTE 是臨時集合,僅在其定義的查詢期間存在。因此,對 CTE 所做的任何變更都不會直接影響來源表。
要克服此限制,需要採用不同的方法來根據 CTE 更新記錄。一種有效的方法是在 CTE 中建立子查詢來計算所需的值。然後,此子查詢可用於 UPDATE 語句,將計算出的值套用至目標表。
考慮以下範例,您希望根據 CTE 中計算的值更新 PEDI_InvoiceDetail
表中的 DocTotal
欄位:
<code class="language-sql">;WITH CTE_DocTotal AS ( SELECT InvoiceNumber, SUM(Sale + VAT) AS DocTotal FROM PEDI_InvoiceDetail GROUP BY InvoiceNumber )</code>
此 CTE 計算每個 InvoiceNumber
的 DocTotal
並將結果儲存在暫存集合中。要使用這些值來更新 PEDI_InvoiceDetail
表,可以使用 CTE 中的子查詢:
<code class="language-sql">;WITH T AS ( SELECT InvoiceNumber, SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal FROM PEDI_InvoiceDetail ) UPDATE T SET DocTotal = NewDocTotal</code>
在此子查詢中,帶有 OVER
子句的 SUM()
函數計算由 InvoiceNumber
定義的每個分區(群組)的新 DocTotal
。然後,此子查詢被別名為 T 並用於 UPDATE 語句,以使用計算出的值更新 DocTotal
列。
透過此方法,您可以有效地根據 CTE 中計算的值更新 PEDI_InvoiceDetail
表中的記錄,確保變更會持久保存在來源表中。
以上是如何使用公共表表達式 (CTE) 中計算的值更新表記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!