Увеличение значения столбца в базе данных SQL, если есть повторяющаяся строка - PullRequest
0 голосов
/ 22 октября 2018

Предположим, у меня есть такая таблица:

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?

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Вы можете использовать триггеры для достижения того, что вы хотите.Формат:

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;
0 голосов
/ 22 октября 2018

Создать уникальный индекс для продукта и типа, затем

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

Должно работать.

0 голосов
/ 22 октября 2018

Вы можете попробовать следующее, используя 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

, где составной уникальный (первичный) ключ является обязательным для столбцов Product и Type, если не существует, чем 42P10: нет уникального или исключающего ограничения, соответствующего спецификации ON CONFLICT ошибка возникает.

...