【问题标题】:Loop table from within mysql stored proceduremysql存储过程中的循环表
【发布时间】:2017-01-17 13:48:00
【问题描述】:

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

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

【问题讨论】:

  • 对我来说不够详细,能否提供示例数据和预期结果。

标签: mysql loops stored-procedures


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 2012-05-05
    • 2013-08-05
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2013-06-20
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多