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

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

Mary-Kate Olsen
發布: 2025-01-08 14:46:41
原創
495 人瀏覽過

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中文網其他相關文章!

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