mysql更新语句在同一个表上使用from子句

标签 mysql sql

以下是MS Sql server Update语句

    Update 
        HC_TranDetails
SET
        InsPayments = (SELECT IsNull(SUM(ISNULL(CreditAmount,0)),0) From HC_TranDetails TDS
                        Where TDS.TransactionType = 2 
                        AND TDS.ClaimNo = TD.ClaimNo 
                        AND TDS.LineItemNo = TD.LineItemNo 
                        AND IsNull(TDS.InsPlanRowID,'') <> ''
                        AND TDS.ReverseEntry <> 1 ),

        Adjustments = (SELECT IsNull(SUM(ISNULL(CreditAmount,0)),0) From HC_TranDetails TDS
                        Where TDS.TransactionType = 8
                        AND TDS.ClaimNo = TD.ClaimNo 
                        AND TDS.LineItemNo = TD.LineItemNo 
                        AND IsNull(TDS.InsPlanRowID,'') <> ''
                        AND TDS.ReverseEntry <> 1 ),


FROM
        HC_TranDetails TD

现在我正在 mysql 中尝试相同类型的语句,如下

    UPDATE claimdetails SET balanceAmount =  (SELECT IFNULL(SUM(IFNULL(debitamount,0)) -  SUM(IFNULL(creditamount,0)),0) 
                      FROM claimdetail CD WHERE CD.claimID = CDS.claimID)

FROM ClaimDetail CDS

但它在第 4 行的“From ClaimDetail CDS”附近显示为语法错误

最佳答案

MySQL 对于同一个表上的更新很挑剔。简单的解决方法是包含额外的子查询级别。不过,正确的解决方法是使用联接

UPDATE claimdetails join
       (select claimid, IFNULL(SUM(IFNULL(debitamount,0)) -  SUM(IFNULL(creditamount,0)),0) as val
        from ClaimDetails
        group by claimid
       ) agg
       on claimdetails.claimid = agg.claimid
    SET balanceAmount = agg.val;

关于mysql更新语句在同一个表上使用from子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19816567/

相关文章:

sql - 是否可以声明数组数据类型列?数据库

c# - 谁能告诉我这是什么意思 WriteLine ("{0,-12}")

sql - 根据两个多对多关系选择行

sql - 如何从一个JOIN返回多个记录作为列?

php - json编码阿拉伯语问题

MySQL 查询返回每个结果的倍数

php - 如何在php mysql中向手机号码发送群发短信

php - 通过php导入sql

mysql 有条件随机

mysql - 如何忽略 "Cannot add or update a child row"错误