首页 > 解决方案 > 如何在单个 SQL 查询中更新具有两个不同 ID 和不同值的一列中的两列?

问题描述

我有一张桌子Item

id | price
---+--------
1  | 20000
2  | 30000
3  | 40000
4  | 43000

如何在单个 SQL 查询中更新价格列 id(1) = 1000, id(2) = 2000?

标签: sqlpostgresql

解决方案


使用case

update items
    set price = (case when id = 1 then 1000 when id = 2 then 2000 else price end)
    where id in (1, 2);

您也可以使用from子句来编写:

update items
    set price = v.price
    from (values (1, 1000), (2, 2000)) v(id, price)
    where v.id = items.id;

这也更安全一些,确保 id 确实匹配,不会意外更新额外的行。


推荐阅读