首頁 >資料庫 >mysql教程 >如何在SQL中有效率地從CTE更新表記錄?

如何在SQL中有效率地從CTE更新表記錄?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-08 14:46:41506瀏覽

How to Efficiently Update Table Records from a CTE in SQL?

利用CTE高效率更新表記錄

以下程式碼片段展示如何利用公共表表達式(CTE)高效更新表記錄。程式碼中的 CTE CTE_DocTotal 透過匯總 PEDI_InvoiceDetail 表中的 SaleVAT 欄位計算每個發票的 DocTotal。目標是使用 CTE 中計算的值更新 PEDI_InvoiceDetail 表中的 DocTotal 欄位。

然而,原始程式碼有一個限制:對 CTE 的更新不會自動反映到來源表(PEDI_InvoiceDetail)。為了達到預期的結果,需要修改程式碼。

改良方案:

改進後的程式碼使用了不同的 CTE,命名為 T,它檢索 InvoiceNumberDocTotal 和基於每個發票的 SaleVAT 值重新計算的 DocTotal。這個新的 DocTotal 使用 OVER() 子句和 PARTITION BY 子句計算,確保計算針對每個 InvoiceNumber 分組進行。

UPDATE 語句接著使用 CTE TNewDocTotal 賦值給 DocTotal 欄位。這有效地使用 CTE 計算的修訂值更新了 PEDI_InvoiceDetail 表中的 DocTotal 欄位。

以下是修改後的程式碼:

<code class="language-sql">WITH T AS
(
   SELECT  InvoiceNumber, 
            DocTotal, 
            SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal
    FROM    PEDI_InvoiceDetail
)
UPDATE  T
SET     DocTotal = NewDocTotal;</code>

以上是如何在SQL中有效率地從CTE更新表記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn