首页 >数据库 >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