#postgresql
Вопрос:
я хотел бы обновить строку, если некоторые поля имеют определенные значения («идентификатор» на данный момент неясен), или вставить, если эта комбинация совершенно новая. Возможно ли это без процедуры, и если да, то как? Я думаю, что это как-то работает с «конфликтом», но я не могу этого понять. Спасибо
Пример:
UPDATE table_name SET column1 = value1, column2 = value2, WHERE column1 = 1 and column2 = 2;
если нет набора данных, где column1 = 1 и column2 = 2, сделайте это:
INSERT INTO table_name (column1, column2, column3, column4) VALUES (value1, value2, value3, value4);
Возможно ли реализовать это всего одним запросом?
Комментарии:
1. Спросите еще раз, когда у вас будут четкие, конкретные требования.
2. @LaurenzAlbe я надеюсь, что с моим примером теперь все ясно.
3. ваше обновление не имеет для меня смысла, поскольку вы изменяете столбцы, которые также используются для поиска строк в предложении WHERE. Вы имели в виду обновление
column3
иcolumn4
в заявлении об ОБНОВЛЕНИИ?4. @a_horse_with_no_name о, извините, вы правы.
Ответ №1:
Вам нужен уникальный индекс или ограничение (column1, column2)
, тогда вы можете сделать:
INSERT INTO table_name (column1, column2, column3, column4)
VALUES (value1, value2, value3, value4)
on conflict (column1, column2)
do update
set column3 = excluded.column3,
column4 = excluded.column4;
Комментарии:
1. Вы имеете в виду, что значения столбцов 1 и 2 должны быть уникальными? Но они не уникальны, сочетание делает их уникальными, вот в чем проблема…
2. @PeterFox: вот чего достигнет уникальное ограничение
(column1, column2)