在MariaDB(MySQL)中更新(子查询)set .....表达式

时间:2016-04-13 01:16:54

标签: mysql stored-procedures mariadb

我正在尝试将MS Sql存储过程转换为MariaDB存储过程。

这是Mariadb(Mysql)存储过程的一部分,我转换如下:

DROP TEMPORARY TABLE IF EXISTS tt_tmpTable;  
   CREATE TEMPORARY TABLE tt_tmpTable
   (
      FNewID VARCHAR(11), 
      FOrderID VARCHAR(10), 
      FMasterYN VARCHAR(1),
      FpcherCd VARCHAR(5), 
      FpcherNm VARCHAR(50), 
      FvndCd VARCHAR(7), 
      FvndNm VARCHAR(50), 
      FStep VARCHAR(5),
      FrequestDt VARCHAR(8), 
      FConfirmDt VARCHAR(8), 
      FAmount NUMERIC(21,2), 
      FitemCd VARCHAR(6), 
      FitemNm VARCHAR(100),
      Fqty INT, 
      FCost NUMERIC(21,2), 
      FTotalCost NUMERIC(21,2), 
      FAddAmt NUMERIC(21,2), 
      FAddMemo VARCHAR(255), 
      FItemDiv VARCHAR(20),
      FMemo VARCHAR(255)
   );

        UPDATE (select FOrderID FID, sum(FTotalCost) FAMT from tt_tmpTable where FMasterYN = 'N' group by FOrderID) t 
        set tt_tmpTable.FAmount = t.FAMT where FOrderID = t.FID;

但它没有工作并且出现错误,因为"错误代码:1288 UPDATE的目标表t不可更新"。

所以我想知道是否有人帮助我解决这个问题。

2 个答案:

答案 0 :(得分:0)

您需要将tt_tmpTable声明为“t”(见下文)......

SELECT FOrderID AS FID, SUM(FTotalCost) AS FAMT FROM tt_tmpTable t WHERE...

答案 1 :(得分:0)

我认为你错过了JOIN

UPDATE tt_tmpTable JOIN
       (select FOrderID, sum(FTotalCost) as FAMT
        from tt_tmpTable
        where FMasterYN = 'N'
        group by FOrderID
       ) t 
       ON tt_tmpTable.FOrderID = t.tt_tmpTable
    set tt_tmpTable.FAmount = t.FAMT  ;

您的原始查询不适用于任何数据库。无法更新聚合结果。