使用Merge在单个表中插入和更新?

时间:2015-07-29 09:56:58

标签: oracle merge

我想根据条件更新或插入Oracle Table。

考虑到表中有2列(如id和name),一个或多个名称具有相同的id。在这种情况下,我想检查ID和名称(如1,'买方'),如果它存在,那么我想将名称'买方'更新为'服务提供商'。否则我只想插入值(1,'服务提供商')。

我通过Merge尝试了这个,但是它将id 1的所有名称列更新为“Service Provider”。

merge into party_type p
using (select 1 party_id, 'Buyer' party_type from dual) t
  on (t.party_id = p.party_id)
when matched then
  update set party_type = 'Service Provider'
when not matched then
  insert (party_id,party_type) values(1,'Service Provider');

表中的可用数据:

1  Buyer
1  Buyer Agent
1  Vendor

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要加入两个列

merge into party_type p
using (select 1 party_id, 'Buyer' party_type from dual) t
  on (t.party_id = p.party_id and t.party_type = p.party_type)
when matched then
  update set party_type = 'Service Provider'
when not matched then
  insert (party_id,party_type) values(1,'Service Provider');