从mysql存储过程中循环表

时间:2017-01-17 13:48:01

标签: mysql loops stored-procedures

我有一个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);

有人可以填空吗?提前致谢

1 个答案:

答案 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