首页 > 数据库 > mysql教程 > 如何使用 CTE 的计算值更新表记录?

如何使用 CTE 的计算值更新表记录?

Mary-Kate Olsen
发布: 2025-01-08 14:40:39
原创
671 人浏览过

How Can I Update Table Records with Calculated Values from a CTE?

使用 CTE 高效更新表记录

本文介绍了如何使用公共表表达式 (CTE) 正确更新表记录以计算新值。 目标是使用重新计算的总计来更新 DocTotal 表中的 PEDI_InvoiceDetail 列。 之前的尝试失败,因为对 CTE 的更新未传播到基表。

挑战

直接根据 CTE 的计算值更新表通常会导致错误。 CTE充当临时结果集;其中的更改不会自动更新基础表。

解决方案

该解决方案涉及使用 CTE 的两步过程:

<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>
登录后复制

修改后的查询:

  1. 创建 CTE: CTE T 选择 InvoiceNumber(原始 DocTotal),并使用 DocTotal 函数计算新的 NewDocTotal (SUM() OVER (PARTITION BY InvoiceNumber))。这可以有效地聚合每个唯一的 Sale VATInvoiceNumber

  2. 更新基表: 然后 UPDATE 语句直接针对 CTE T,将原始 DocTotal 设置为新计算的 NewDocTotal。 这可确保更改应用于 PEDI_InvoiceDetail 表。

关键概念

  • OVER (PARTITION BY ...): 这个关键子句按 InvoiceNumber 对数据进行分区,允许 SUM() 函数单独计算每张发票的总额。

此方法提供了一种干净高效的方法,用于使用从 CTE 派生的计算值更新记录,避免尝试修改 CTE 本身的常见陷阱。

以上是如何使用 CTE 的计算值更新表记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

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