是否可以从键/值对更新行?

问题描述 投票:0回答:4

举例说明:

UPDATE Table SET value=(22,55,99) WHERE id IN (2,5,9)

因此,带有

id=2
value
的行设置为
22
。并且带有
id=5
value
的行设置为
55
。等等

sql sql-server
4个回答
21
投票

您可以使用派生表:

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

对我来说,这是最优雅的方式,而且它也很容易扩展(如果您愿意,您可以添加更多列)


2
投票

是的,但不像你:

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
查询。


1
投票

使用

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)

0
投票

正如评论所述,我错过了 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 字符串中

© www.soinside.com 2019 - 2024. All rights reserved.