我们假设我有一个表格users
,我想为foo
和{{1}的用户设置"bar"
字段为id in (1,5,10)
对于"qux"
的用户,通常我可能会有更多的值和更多的ID组来与每个值一起使用。
目前(用我选择的脚本语言)我循环遍历foo和id组的值对,像这样(伪代码)
id in (3,8,15)
有没有办法可以在单个sql命令中执行此操作,而不是每对一个命令?
答案 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);
注意:只要else
和where
语句中的列表匹配,就不需要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
的结果。