@kirick29

Как обновить данные, если они уже существуют, и добавить их, если их нет?

Вот например, смотрите. Существует таблица с полями id и chtoto(массив) и надо проверить, есть ли в ней запись с id допустим 74291910 и если есть, то обновить запись, если нет - добавить запись. Вот запрос который у меня получился:
INSERT INTO table (id, chtoto) VALUES (74291910, array_append(chtoto, 'string') 
ON CONFLICT (id) DO UPDATE SET chtoto=array_append(chtoto, 'string')

Но с этим есть проблема - много раз указывается chtoto. Как можно переписать правильно этот запрос?
  • Вопрос задан
  • 629 просмотров
Решения вопроса 2
yellow79
@yellow79
Senior Software Engineer
INSERT INTO table (id, chtoto) VALUES (74291910, array_append(chtoto, 'string') 
ON CONFLICT (id) DO UPDATE SET chtoto=EXCLUDED.chtoto
Ответ написан
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Вам следует использовать следующий запрос:
INSERT INTO tbl (id, chtoto) VALUES (74291910, array['string'])
ON CONFLICT (id) DO UPDATE SET chtoto=array_append(tbl.chtoto, 'string');
								 
INSERT INTO tbl (id, chtoto) VALUES (74291910, array['string2'])
ON CONFLICT (id) DO UPDATE SET chtoto=array_append(tbl.chtoto, 'string2');


Проверить SQL запрос

Результат:
+==========+==================+
| id       | chtoto           |
+==========+==================+
| 74291910 | {string,string2} |
+----------+------------------+
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rrambo
сначала insert с уникальным полем — запись не добавится если уже есть.
а потом запрос update.
точнее, лучше поменять местами, наверное. сначала обновить записи что уже есть, а потом добавить. дублей не будет так как id сделан как уникальное поле.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы