Mysql - case语句更新所有值而不仅仅是匹配id

标签 mysql

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

相关文章:

mysql - 为导出/导入加扰 MySql 单元格内容

mysql子查询结果作为字段

PHP MySQL + 基于表单选择创建搜索查询

Mysql查找重复项

php - 从数据库中仅选择字符串的标签部分

php - 如何在 PHP 分页中继续保留 sql 结果中的行数?

php - 选择介于两次之间的行

php - Webmatrix 用户 '' @'localhost' 访问被拒绝(使用密码 : NO)

php - 响应式设计的服务器端涉及什么?

php - 错误: Call to undefined function SUM()