SQL вставляет несколько строк, если не существует, иначе обновите определенный столбец с помощью COALESCE - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть таблица с двумя столбцами: id, age, где id - первичный ключ

Я знаю, как вставить ОДНУ новую строку для нового первичного ключа, иначе обновите возраст новым значением, если значение возраста не равно нулю, используя следующий sql:

insert into obj (id, age) 
values (2, 42) 
on conflict (id) do 
update set age = coalesce(42, obj.age)

а как мне сделать это с несколькими строками? Например:

insert into obj (id, age) 
values (2, 42), (3, 43), (5, 60) 
on conflict (id) do 
update set age = coalesce(???, obj.age)

вопрос в том, что я должен поставить в '???' в коалессе?

Я думал, что кто-то предложил использовать COALESCE(values(age), obj.age, Я пытался, но это не сработало (синтаксическая ошибка).

1 Ответ

0 голосов
/ 24 апреля 2018
insert into obj (id, age) 
values (2, 42), (3, 43), (5, 60) 
on conflict (id) do 
update set age = coalesce(excluded.age, obj.age)

Обратите внимание на использование специальной записи excluded. По документации:

Предложения SET и WHERE в ON CONFLICT DO UPDATE имеют доступ к существующей строке, используя имя таблицы (или псевдоним), и к строкам, предложенным для вставки, с использованием специальной таблицы исключить .

...