You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL实现TaxRate表:存在则更新税率、不存在则插入?

实现“存在则更新,不存在则插入”(UPSERT)的简便方法

这种需求在SQL里称为UPSERT,不需要写复杂的条件判断语句,主流数据库都提供了原生语法支持,前提是你的TaxRate表必须将邮编字段设置为唯一约束或主键,这样数据库才能识别重复记录。

以下是不同数据库的具体实现:

MySQL/MariaDB

使用INSERT ... ON DUPLICATE KEY UPDATE语法:

INSERT INTO TaxRate (邮编, 税率)
VALUES 
    ('100000', 0.03),
    ('200000', 0.05),
    ('300000', 0.02)
ON DUPLICATE KEY UPDATE
    税率 = VALUES(税率);

当插入的邮编已存在时,自动触发更新操作,将该邮编对应的税率替换为新值;若邮编不存在,则直接插入新记录。

PostgreSQL

使用INSERT ... ON CONFLICT语法:

INSERT INTO TaxRate (邮编, 税率)
VALUES 
    ('100000', 0.03),
    ('200000', 0.05),
    ('300000', 0.02)
ON CONFLICT (邮编) DO UPDATE SET
    税率 = EXCLUDED.税率;

ON CONFLICT (邮编)指定判断重复的字段,EXCLUDED代表待插入的那条记录,当冲突发生时,用新值更新现有记录的税率。

SQL Server

使用标准SQL的MERGE语句,也适用于其他支持该语法的数据库:

MERGE INTO TaxRate AS Target
USING (
    VALUES 
        ('100000', 0.03),
        ('200000', 0.05),
        ('300000', 0.02)
) AS Source (邮编, 税率)
ON Target.邮编 = Source.邮编
WHEN MATCHED THEN
    UPDATE SET Target.税率 = Source.税率
WHEN NOT MATCHED THEN
    INSERT (邮编, 税率) VALUES (Source.邮编, Source.税率);

该语句将目标表TaxRate与你提供的源数据关联,匹配到相同邮编时执行更新,未匹配到则执行插入。

注意事项

  • 务必确保邮编字段有唯一约束/主键,否则上述语句无法正确识别重复记录,可能导致插入重复数据或报错。
  • 以上语法均支持批量操作,一次性处理多条记录,比逐条判断执行的效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:44:53