Копировать данные из одной таблицы в другую - игнорировать дубликаты Postgresql - PullRequest
0 голосов
/ 27 мая 2019

Я использую Postgresql db.У меня есть данные в двух таблицах.Таблица A имеет 10 записей, а таблица B - 5 записей.

Я хотел бы скопировать данные таблицы A в таблицу B, но скопировать только новые записи (5 записей) и игнорировать дубликаты / уже существующие данные

Я хотел бы скопировать данные из таблицы Aв таблицу B, где в таблице B будет 10 записей (5 старых записей + 5 новых записей из таблицы A)

Не могли бы вы помочь мне с тем, как это можно сделать?

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Если вы хотите скопировать строки, уникальные для A, которых нет в B, вы можете использовать INSERT ... SELECT. Оператор SELECT должен использовать оператор объединения EXCEPT:

INSERT INTO B (column)
SELECT column FROM A
EXCEPT
SELECT column FROM B;

EXCEPT (https://www.postgresql.org/docs/current/queries-union.html) сравнивает два результирующих набора и возвращает отдельные строки, присутствующие в результате A, но не в B, затем передает эти значения в INSERT. Чтобы это работало, оба столбца и соответствующие типы данных должны совпадать в обоих запросах SELECT и вашей вставке.

0 голосов
/ 27 мая 2019

Предполагая, что id является вашим первичным ключом, а структуры таблиц идентичны ( обе таблицы имеют общие столбцы в виде числа столбцов и типа данных соответственно ), используйте not exists:

insert into TableB
select * 
  from TableA a 
 where not exists ( select 0 from TableB b where b.id = a.id )
...