MySQL - 一次点击更新记录组

时间:2015-07-01 11:20:11

标签: mysql sql

我们假设我有一个表格users,我想为foo和{{1}的用户设置"bar"字段为id in (1,5,10)对于"qux"的用户,通常我可能会有更多的值和更多的ID组来与每个值一起使用。

目前(用我选择的脚本语言)我循环遍历foo和id组的值对,像这样(伪代码)

id in (3,8,15)

有没有办法可以在单个sql命令中执行此操作,而不是每对一个命令?

2 个答案:

答案 0 :(得分:3)

您可以使用case语句在SQL中执行此操作。查询看起来像:

update users u
    set foo = (case when id in (1, 5, 10) then 'bar'
                    when id in (3, 8, 15) then 'qux'
                    else foo
               end)
    where id in (1, 5, 10) or id in (3,  8, 15);

注意:只要elsewhere语句中的列表匹配,就不需要when。但它更安全。

此外,in中的where列表可以合并为一个。但是,我认为它更清楚,因为它符合case语句逻辑。

答案 1 :(得分:0)

使用CASE选择更新值:

update users
  set foo = case when id in (1,5,10) then 'bar'
                 when id in (3,8,15) then 'qux'
                 else foo end

where id in (1,5,10) or id in (3,8,15)

WHERE子句用于保持事务大小不变,但不会影响UPDATE的结果。