#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть таблица, A
которая содержит около 10 миллионов строк, и таблица B
, которая содержит некоторую обновленную информацию для некоторых строк в таблице A
, а также содержит новые строки, которые не существуют в таблице A
.
Я хочу обновить таблицу A
с помощью table B
и в то же время вставить строки, которые не имеют совпадений в таблице A
.
Я нашел много ответов, подобных приведенному ниже решению, но, похоже, во всех них отсутствует часть вставки, которую я ищу.
UPDATE A
SET code = B.code
FROM B
WHERE A.id = B.id
Комментарии:
1. Если данные находятся в двух таблицах, просто запустите два запроса,
update
и aninsert
.
Ответ №1:
Используйте два запроса:
update a
set code = b.code
from b
where a.id = b.id;
insert into a (id, code)
select id, code
from b
where not exists (select 1 from a where a.id = b.id);
Вы также можете использовать on conflict
insert into a (id, code)
select b.id, b.code
on conflict on constraint a_id
do update set code = b.code;