我正在使用Postgresql数据库。我在两个表中有数据。表A有10条记录,表B有5条记录。
我想将表A的数据复制到表B,但仅复制新条目(5条记录),而忽略重复项/已经存在的数据
我想将数据从表A复制到表B,其中表B将具有10条记录(5条旧记录+ 5条来自表A的新记录)
请问我该怎么做?
答案 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中都匹配。