使用其他表进行Postgres合并的例子

问题描述 投票:0回答:1

我试图使用合并操作符来执行upsert,很快就意识到postgres不像SQL Server那样有相同的合并语句,而且有很多帖子都提到 "insert on conflict "语句来模拟。

我有一个阶段表(tabB)和最终表(tabA)--需要将STAGE表的记录upset到最终表TabA中。

表TabA

id   |  Val
------------
1    | 20     
3    | 30          
5    | 30           

TabB

id   |  Val
------------
3    | 40          
6    | 50           

下面的声明,我试过不工作,说模棱两可的参考 - 我找不到涉及2表的例子。

Insert into tabA( id,val)
    Select id,val
    From tabB 
    On conflict (id)
    Do update set (id, val) = (id,val)

以上不行......谁能告诉我正确的方向?

sql postgresql-9.5 upsert
1个回答
0
投票

在不了解更多细节的情况下,你的代码中一个明显的错误是你试图更新ID列,这也是作为唯一的列。

更新也应该引用 excluded 记录,以避免出现关于 "模糊 "列引用的错误信息。id 可以引用表中存储的当前值或插入语句提供的新值。

insert into tabA(id, val)
select id, val
from tabB 
on conflict (id) 
do update 
  set val = excluded.val;
© www.soinside.com 2019 - 2024. All rights reserved.