我有一个MySQL存储过程,它当前创建一个名为'prod_temp'的表,并使用源表中的行填充它。
我希望存储过程然后循环遍历此'prod_temp'表的所有结果并更新其中一列 - 其值与源表中的值相同+ 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)
您不需要遍历表,您可以在一个更新查询中执行此操作:
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