使用ID列表更新多行

时间:2014-12-23 10:01:15

标签: mysql sql

我需要在Ids的基础上更新表中的多行。在存储过程中,我正在创建一个包含Ids列表的varchar变量。

现在,在表中我有Ids 1,2的条目.varchar变量的值为1,2;所以我期待下面的查询不会更新任何行。

UPDATE mytbl
SET flag = 1
WHERE Id IN (IdList); -- Here IdList has value '1,2'

但此处ID为2的行正在更新。选择查询也返回相同的行。 我尝试将IdList连接为"'1','2'",然后重新调整两行(包含ID 1和2)。 Id的数据类型为int。有没有正确的方法来维护整数列表?

5 个答案:

答案 0 :(得分:10)

只需使用id作为整数:

UPDATE mytbl
SET flag = 1
WHERE id in (1,2,3,....)

答案 1 :(得分:3)

试试这个:

UPDATE mytbl
SET flag = 1
WHERE @IdList LIKE CONCAT('%,',Id,',%');

请注意,您的varchar列表@IdList必须以逗号开头和结尾(例如,1,2,20,30,)。

答案 2 :(得分:0)

动态生成子查询,其中列表不是VARCHAR而是查询文本的一部分。即用更高级的语言(perl / python / php)实现它。

答案 3 :(得分:0)

你应该尝试左连接,因为你得到一个ID的@table类型参数,这将给出快速和更可靠的结果:)

UPDATE 
    mytbl
SET
    flag = 1
FROM
    @IdList idL
    LEFT JOIN mytbl mTbl ON mTbl.ID = idL.Table_ID 

答案 4 :(得分:0)

这也有效,这里你不需要在定义变量的开头和结尾有逗号。

SET @IdList = "1,2";

UPDATE mytbl
SET flag = 1
WHERE FIND_IN_SET(Id, @IdList);