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行有效。
提前致谢,
答案 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);