MYSQL存储过程仅在记录上更新

时间:2017-07-07 06:14:29

标签: mysql stored-procedures

MYSQL存储过程仅在更新 WHERE id IN 子句中的所有ID时更新一条记录。当我在存储过程之外运行SELECT和UPDATE时,它工作正常。有什么建议吗?

DELIMITER $$
CREATE PROCEDURE update_ids(IN source int(10),IN target int(10))
BEGIN
    DECLARE idList varchar(5000) DEFAULT NULL;
    SET idList = (SELECT GROUP_CONCAT(id SEPARATOR ', ') FROM myTable ii WHERE ii.generic_id = source);
    UPDATE myTable i SET i.generic_id = target WHERE i.id IN (idList);

END$$
DELIMITER ;

然后我用 - >

来称呼它
CALL update_generic_ids(63, 1258);

更新:1行有效。

提前致谢,

2 个答案:

答案 0 :(得分:0)

一旦尝试下面的代码块,希望它能解决你的问题! 如果有任何问题到达我! DELIMITER $$ CREATE PROCEDURE update_ids(IN source int(10),IN target int(10)) BEGIN DECLARE idList varchar(5000) DEFAULT NULL; --SET idList = (SELECT GROUP_CONCAT(id SEPARATOR ', ') FROM myTable ii WHERE ii.generic_id = source); UPDATE myTable i SET i.generic_id = target WHERE i.id IN ( SELECT id FROM myTable ii WHERE ii.generic_id = source );

END$$ DELIMITER ;

答案 1 :(得分:0)

实际上,根据我的评论,我认为可能是答案..

这两个问题之间存在差异:

UPDATE a SET b = c WHERE d IN ('1,2,3,4')

UPDATE a SET b = c WHERE d IN (1,2,3,4)

我建议您修改程序,这样就不会将ID列表存储在字符串变量中。实际上你不需要存储任何东西,只需将select生成的列表放入更新:

    UPDATE myTable i SET i.generic_id = target 
    WHERE i.id IN 
       (SELECT id SEPARATOR FROM myTable ii WHERE ii.generic_id = source);