首页 > 解决方案 > 如果存在重复行,则增加 SQL 数据库中的列值

问题描述

假设我有一个这样的表:

Number   Product    Type
 1        Meat      Cow
 1        Milk       A

如果我插入一个新行:

INSERT INTO t1 (Product, Type) VALUES (Meat, Cow)

我不想要一个新行。我希望 Product = Meat 和 Type = Cow 的列“数字”增加 1:

Number   Product    Type
 2        Meat      Cow
 1        Milk       A

是否有执行此操作的 SQL 命令?

标签: sqlpostgresqlinsertsql-update

解决方案


您可以使用ON CONFLICT从 version 开始的方法尝试以下操作9.5

create table t1( Number int, 
                 Product varchar(15), 
                 Type varchar(15),
                 primary key (Product, Type)
               );

insert into t1(Number,Product,Type) values(1,'Meat','Cow');               

insert into t1(Number,Product,Type) values(1,'Meat','Cow')
on conflict (Product,Type) do update set Number = t1.Number + 1;
select * from t1;  

number  product type
------  ------- ----
  2      Meat   Cow

Rextester 演示

其中复合唯一(主)键是必须的ProductType列,如果不存在,则超过42P10:没有唯一或排除约束匹配 ON CONFLICT 规范错误引发。


推荐阅读