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

时间:2019-05-27 14:32:04

标签: sql postgresql postgresql-9.3

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

我想将表A的数据复制到表B,但仅复制新条目(5条记录),而忽略重复项/已经存在的数据

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

请问我该怎么做?

3 个答案:

答案 0 :(得分:1)

INSERT INTO Table_A
SELECT *
FROM Table_B
ON CONFLICT DO NOTHING

在这里,冲突将基于您的主键进行。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果要复制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查询和INSERT中都匹配。