我有一个 case 语句同时更新多个列和行,但由于某种原因,即使没有输入值,它也会更新所有行和列。
UPDATE price SET item = CASE id
WHEN 18 THEN 'cvbcvbcvb'
END,
description = CASE id
WHEN 17 THEN 'cvbcv'
END,
price = CASE id
WHEN 19 THEN '222'
END
WHERE id IN (17, 18, 19);
我注意到,如果某列未更新,则该列的值不会发生变化,因此,例如,如果省略列描述,则描述中的任何值都不会丢失
有什么想法吗?
编辑我正在使用 PHP 来收集数据,更新量将根据用户输入而变化,抱歉应该提到这一点
最佳答案
案例在这里帮不了你。试试这个。
UPDATE price SET
item = if(id = 18, 'cvbcvbcvb', item),
description = if(id = 17, 'cvbcv', description),
price = if(id = 19, '222', price)
WHERE id IN (17, 18, 19);
更新处理评论:
显然它必须是CASE
。
请尝试一下:
UPDATE price SET
item = CASE id WHEN 18 THEN 'cvbcvbcvb' ELSE item END,
description = CASE id WHEN 17 THEN 'cvbcv' ELSE description END,
price = CASE id WHEN 19 THEN '222' ELSE price END
WHERE id IN (17, 18, 19);
使用 CASE 并不依赖于它是否在 SELECT 中,它只是一个运算符 - 您可以在 SELECT、ON 或 FROM、WHERE、HAVING 中的 USING 中使用它,...几乎在任何地方。
我不知道该语法错误,请更新您的代码。
关于Mysql - case语句更新所有值而不仅仅是匹配id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21287290/