请问一个merge into 的ON后面多个条件如何实现?

hafoo 2014-02-19 03:10:08
merge into  table_a v

using

(

select t1,t2,t3 from table_b,TABLE_C where …

) res on(v.t1=b.t1)

when matched then
update set v.f1=zny.t2,
v.f2=zny.t3,
when not matched then

insert v (f1,f2)value(t2,t3)

现在的问题是 存在table_a中的T1与res中的T1不匹配,但是table_a中的f1与res中的t2相同的值,导致唯一性问题,无法插入记录

如此情况该如何解决?
table_a

f1 T1

北京3962 65601




res

t2 T1

北京3962 10732







...全文
3600 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hafoo 2014-03-03
  • 打赏
  • 举报
回复
我没有说明白吗?
CT_LXL 2014-02-20
  • 打赏
  • 举报
回复
引用 楼主 hafoo 的回复:
merge into  table_a v

using

(

  select t1,t2,t3 from table_b,TABLE_C where …

) res on(v.t1=b.t1)

when matched then
 update set v.f1=zny.t2,
   v.f2=zny.t3,
   when not matched then

insert v (f1,f2)value(t2,t3)
现在的问题是 存在table_a中的T1与res中的T1不匹配,但是table_a中的f1与res中的t2相同的值,导致唯一性问题,无法插入记录 如此情况该如何解决?
table_a

f1      T1  
 
北京3962  65601
 

 

res

t2          T1
 
北京3962  10732
 

 

不太清楚你想要什么样的数据,但是你如果允许插入这种数据(F1相同F2不同),建议你可以将F1和F2作为联合主键来使用
CT_LXL 2014-02-20
  • 打赏
  • 举报
回复
引用 2 楼 hafoo 的回复:
我就是想 on 后面能不能这样写:

res on(v.t1=b.t1 or v.f1=b.t2)
when matched then
 update set v.f1=zny.t2,
   v.f2=zny.t3,
v.t1=b.t1
你可以在on的括号里加条件 如ON(V.T1=B.T1 AND V.F1=B.T2) 你也可以这样写:
MERGE INTO T1 USING T2 ON(T1.ID=T2.ID)
WHEN MATCHED THEN
  UPDATE SET T1.NM='US' WHERE T1.ID=2;
hafoo 2014-02-20
  • 打赏
  • 举报
回复
我就是想 on 后面能不能这样写:

res on(v.t1=b.t1 or v.f1=b.t2)
when matched then
 update set v.f1=zny.t2,
   v.f2=zny.t3,
v.t1=b.t1

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧