我正在迁移大量PostgreSQL脚本以在Snowflake中工作。使我困扰的问题是on conflict
语法,尤其是当您使用on conflict do nothing
时。
insert into table1
select
user_id
, something_else
from table2
on conflict do nothing;
有人建议Postgres使用on conflict
,some are not happy about it来等效merge into
。但是,当您使用merge into
时,必须指定一个on <CONDITION>
子句,例如merge into t1 using t2 on t1.id = t2.id ...
。
但是如果使用on conflict do nothing
,应该怎么做?
在这种情况下,使用merge into
时比指定每列的语法更详细吗? (假设您有15列,而您必须写其中的每一列)。
答案 0 :(得分:1)
尝试一下(假设您要使用user_id作为唯一性标准)
merge into table1
using (select user_id, something_else from table2) sub
on sub.user_id = table1.user_id
when not matched then insert values(sub.user_id, sub.something_else)
或者简单地消除具有现有user_id
insert into table1
select user_id, something_else from table2
where user_id not in (select user_id from table1)
或者如果您只想防止全行重复,请执行
insert into table1 (
select user_id, something_else from table2
minus
select * from table1
)