2016-04-13 14 views
0

MS SQLストアドプロシージャをMariaDBストアドプロシージャに変換しようとしています。MariaDB(MySQL)の更新(サブクエリ)セット.....式

これは、私は、次のように変換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; 

が、それは「エラーコードとしてエラーを仕事と取得できませんでした:tの1288 ターゲット表UPDATEは更新可能ではありません "。

だから私は誰も私がこの問題を解決するのを助けるのだろうかと思っています。

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 ; 

あなたの元のクエリは上で動作しません:

答えて

0
あなたが "T"(下記参照)としてtt_tmpTableを宣言する必要があります

...

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

は、私はあなたがJOIN不足していると思います任意のデータベース。集計の結果を更新することはできません。

関連する問題