Перезаписать уникальную пару SQL - PullRequest
2 голосов
/ 22 января 2020

У меня есть таблица с именем news, в которой есть уникальная пара (idCategory, ImportantNews). Короче говоря, у news есть одна категория, и я хочу иметь одну новость по категориям. Проблема в том, что я хочу вставить новую запись, даже если эта пара существует в таблице.

У меня есть уникальный индекс для столбцов (idCategory, ImportantNews), поэтому false приведет к ошибке дублирующегося ключа. Я хочу создать триггер или что-то подобное, чтобы определить, существует ли какая-либо запись, имеющая то же самое (idCategory, ImportantNews), что и вставка / обновление. Затем триггер обновит фактическую запись, установив важные новости как нулевые, и вставит новую строку.

Пример:

Одна строка:

(id,idCategory,importantNews) .> (1,1,TRUE);

Если я выполню следующий запрос -> INSERT INTO news (1,True)

таблица останется такой

2 ряда

(id,idCategory,importantNews) .> (1,1,NULL)

(id,idCategory,importantNews) .> (2,1,TRUE)

1 Ответ

0 голосов
/ 22 января 2020

Если вы хотите, чтобы только один idCategory, где есть дубликаты, был истинным, то:

UPDATE news SET importantNews = NULL WHERE idCategory = 1;
INSERT INTO news (idCategory, importantNews) VALUES (1, True);

В идеале вы хотели бы заключить это в транзакцию.

Также почему бы не использовать FALSE вместо NULL для обозначения неважных новостей?

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