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

时间:2014-01-22 15:37:54

标签: 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);

我注意到,如果未更新列,则该列的no值会发生更改,因此,例如,如果省略列描述,则说明中的任何值都不会丢失

任何想法?

编辑我正在使用PHP收集数据,更新量会因用户输入的不同而有所不同应该提到

1 个答案:

答案 0 :(得分:1)

凯斯在这里帮不了你。试试这个。

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或USING in FROM,WHERE,HAVING,......几乎任何地方使用它。

我不知道该语法错误,请更新您的代码。