首頁 > 資料庫 > mysql教程 > 如何使用公共表表達式 (CTE) 中計算的值更新表記錄?

如何使用公共表表達式 (CTE) 中計算的值更新表記錄?

Susan Sarandon
發布: 2025-01-08 14:36:41
原創
125 人瀏覽過

How Can I Update Table Records Using Values Calculated in a Common Table Expression (CTE)?

使用公共表達式 (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 計算每個 InvoiceNumberDocTotal 並將結果儲存在暫存集合中。要使用這些值來更新 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板