从另一个表postgres更新一个表时如何做upsert?

时间:2019-03-26 21:40:40

标签: sql postgresql

我有一个表A,其中包含约一千万行,而表B,它包含有关表A中某些行的一些更新信息,并且还包含不存在的新行表A

我想使用表A更新表B,并同时插入表A中不匹配的行。

我找到了许多答案,例如下面的解决方案,但似乎他们都错过了我要找的插入部分。

UPDATE A 
SET code = B.code
FROM B
WHERE A.id = B.id 

1 个答案:

答案 0 :(得分: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;