ОБНОВЛЕНИЕ и ВСТАВКА на дублированный ключ - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть таблица с 1 уникальным ключом (тип, цвет), но я хочу запрос, который, если я вставляю дубликаты ключей, например, type: type_one |цвет: красный и уже есть строка с этим, я хочу обновить строку, которая уже есть, но все еще хочу вставить.

enter image description here

Iхотите обновить существующую строку и продолжить вставку новой строки.

Пример :

enter image description here

запрос :

INSERT INTO `table` (`type`, `color`) VALUES ('type_one', 'red') ON DUPLICATED KEY `color` = NULL ... **CONTINUE INSERT**

enter image description here

Ответы [ 2 ]

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

Сделайте это PK: PRIMARY KEY(type, color) Это заставит color быть NOT NULL, или вы все равно должны это сделать.

Тогда, вместо сохранения NULLs в цвете, сохраните "".

Это все еще оставляет в приложении вопрос о том, означает ли «тип, но не цвет».

0 голосов
/ 29 сентября 2018

Полагаю, это может вам помочь (надеюсь):

create proc checkingduplicate
    (@color varchar(12),@typeone varchar(10))
    as
    if exists (select type, color ,count(*) from 
    yourtable
    group by type,color
    having count(*)>1 and color=@color and type=@typeone)
    update yourtable set color=null where color in (select  color  from 
    yourtable
    group by type,color
    having count(*)>1 and color=@color and type=@typeone )
    insert into yourtable (type, color) values(@color,@typeone)
    else
    insert into yourtable (type, color) values(@color,@typeone) 

go
exec 'red','type_one'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...