首页 > 数据库 > mysql教程 > 如何在SQL中高效地从CTE更新表记录?

如何在SQL中高效地从CTE更新表记录?

Mary-Kate Olsen
发布: 2025-01-08 14:46:41
原创
516 人浏览过

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 列。

以下是修改后的代码:

WITH T AS
(
   SELECT  InvoiceNumber, 
            DocTotal, 
            SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal
    FROM    PEDI_InvoiceDetail
)
UPDATE  T
SET     DocTotal = NewDocTotal;
登录后复制

以上是如何在SQL中高效地从CTE更新表记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板