如果存在重复的行,则在SQL数据库中增加列值

时间:2018-10-22 13:17:26

标签: sql postgresql insert sql-update

假设我有一个这样的表:

Number   Product    Type
 1        Meat      Cow
 1        Milk       A

如果我插入新行:

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

我不要新的一行。我想将产品=肉类和类型=母牛的“数量”列增加1:

Number   Product    Type
 2        Meat      Cow
 1        Milk       A

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

3 个答案:

答案 0 :(得分:1)

您可以使用ON CONFLICT版本开始的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 Demo

对于ProductType列,必须有复合唯一(主)键(如果不存在)不是 42P10:没有符合ON CONFLICT规范的唯一或排除约束错误出现。

答案 1 :(得分:1)

您可以使用触发器来实现所需的功能。格式:

CREATE OR REPLACE TRIGGER trigger_name
INSTEAD OF INSERT ON table_name
WHEN (your_condition_here) --for example, row exist 
BEGIN 
    UPDATE ... --your update query
END;

答案 2 :(得分:0)

在产品和类型上创建唯一索引,然后

INSERT INTO t1 (Product, Type) VALUES (Meat, Cow) 
ON CONFLICT ON CONSTRAINT <your_key> 
UPDATE set Number = Number + 1

应该工作。