You need to enable JavaScript to run this app. PostgreSQL如何用单条查询更新同一列的多个不同值
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何用单条查询更新同一列的多个不同值

单条SQL批量更新映射值的实现方案

有两种常用的实现方式,都可以在单条语句内完成全部更新:

方案1:使用CASE WHEN语句(全数据库兼容)

这是兼容性最高的写法,支持所有主流关系型数据库(MySQL、Oracle、SQL Server、PostgreSQL等),适合映射项数量不多的场景:

UPDATE CUSTOMERS
SET BANK = CASE BANK
    WHEN '01' THEN 'Chase'
    WHEN '02' THEN 'BankOfAmerica'
    WHEN '03' THEN 'JPMorgan'
    WHEN '04' THEN 'WellsFargo'
    WHEN '05' THEN 'Citigroup'
    ELSE BANK -- 避免不在映射范围内的Bank值被清空
END;

如果不需要保留未匹配的原有值,可以加WHERE条件缩小更新范围,提升执行效率:

UPDATE CUSTOMERS
SET BANK = CASE BANK
    WHEN '01' THEN 'Chase'
    WHEN '02' THEN 'BankOfAmerica'
    WHEN '03' THEN 'JPMorgan'
    WHEN '04' THEN 'WellsFargo'
    WHEN '05' THEN 'Citigroup'
END
WHERE BANK IN ('01','02','03','04','05');

方案2:构造临时映射表关联更新(支持VALUES子句的数据库适用)

如果映射项数量非常多,CASE WHEN写法会比较冗余,可以用VALUES构造临时映射表做关联更新,适合PostgreSQL、MySQL 8.0+、SQL Server等支持VALUES行构造器的数据库:

UPDATE CUSTOMERS c
SET BANK = m.bank_name
FROM (
    VALUES
    ('01', 'Chase'),
    ('02', 'BankOfAmerica'),
    ('03', 'JPMorgan'),
    ('04', 'WellsFargo'),
    ('05', 'Citigroup')
) AS m(bank_code, bank_name)
WHERE c.BANK = m.bank_code;

内容的提问来源于stack exchange,提问作者Tariq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 10:48:01