举例说明:
UPDATE Table SET value=(22,55,99) WHERE id IN (2,5,9)
因此,带有
id=2
、value
的行设置为 22
。并且带有 id=5
、value
的行设置为 55
。等等
您可以使用派生表:
update t set
value = a.value
from Table as t
inner join (values
(22, 2),
(55, 5),
(99, 9)
) as a(id, value) on a.id = t.id
对我来说,这是最优雅的方式,而且它也很容易扩展(如果您愿意,您可以添加更多列)
是的,但不像你:
UPDATE Table
SET value=case when id=2 then 22 when id=5 then 55 when id=9 then 99 end
WHERE id in (2,5,9)
如果您必须对大量字段/记录执行此操作,您最好只发出一堆专用的
update
查询。
使用
CASE
表达式选择更新值:
UPDATE Table SET value = case id when 2 then 22
when 5 then 55
when 9 then 99
end
WHERE id IN (2,5,9)
正如评论所述,我错过了 sql-server 标签。这对 MySQL 有效
INSERT INTO Table (id, value)
VALUES (2, 22), (5, 55), (9, 99)
ON DUPLICATE KEY UPDATE value = VALUE(value)
这将使用
value
数据更新 VALUES
列,因为 id
上的唯一约束将触发 SQL 查询的 ON DUPLICATE KEY UPDATE
部分
对于大型更新,您可以用所有(id,值)对填充数组并将其内爆到 VALUES 字符串中