将数据从一个 table 复制到另一个 - 忽略重复 Postgresql

Copy data from one table to another - Ignore duplicates Postgresql

我正在使用 Postgresql 数据库。我有两个表中的数据。 Table A 有 10 条记录,Table B 有 5 条记录。

我想将 Table A 数据复制到 Table B 但只复制新条目(5 条记录)并忽略 duplicates/already 现有数据

我想将数据从 Table A 复制到 Table B,其中 Table B 将有 10 条记录(5 条旧记录 + 5 条来自 Table 的新记录一)

你能帮我看看怎么办吗?

假设 id 是您的主键,并且 table 结构相同(两个 table 都具有公共列,分别作为列数和数据类型) , 使用 not exists :

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

如果您要复制 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) 比较两个结果集,并将 return 结果 A 中存在但 B 中不存在的不同行,然后将这些值提供给 INSERT。为此,列和各自的数据类型必须在 SELECT 查询和您的 INSERT 中匹配。

INSERT INTO Table_A
SELECT *
FROM Table_B
ON CONFLICT DO NOTHING

这里会根据你的主键来取冲突