2017-01-17 12 views
0

私は現在、 'prod_temp'という名前のテーブルを作成し、それをソーステーブルの行で埋めるMySQLストアドプロシージャを持っています。mysqlストアドプロシージャ内のループテーブル

私は、この 'prod_temp'テーブルのすべての結果をループし、ソーステーブル+ 1の値と同じ値を持つカラムの1つを更新したいと思います。私には次のものがあります。

DELIMITER // 

DROP PROCEDURE IF EXISTS MyProcedure; 
CREATE PROCEDURE MyProcedure(IN s_region INT) 
    BEGIN 
     DROP TABLE IF EXISTS prod_temp; 
     CREATE TEMPORARY TABLE prod_temp SELECT * FROM prod WHERE FIND_IN_SET(s_region, regions); 

     // select * from prod_temp 
     // for each prod_temp row 
      // select max(prod_id) from prod where ref = this row.ref 
      // update this row, set prod_id = selected max(prod_id) + 1 
     // end loop 

    END // 

DELIMITER ; 

CALL MyProcedure(50); 

誰かが空白を記入できますか?事前に感謝

+0

足りません詳細は、サンプルデータと期待される結果を供給することができます。 –

答えて

0

あなたは、テーブルをループする必要はありません、あなたは1つの更新クエリでそれを行うことができます。私のため

UPDATE prod_temp AS p 
INNER JOIN (SELECT MAX(prod) as max_prod_id, ref FROM prod GROUP BY ref) AS max_p 
ON p.ref = max_p.ref 
SET p.prod_id = max_p.max_prod_id + 1 
関連する問題