两张表关联比较记录是否相同

本文介绍了一个Oracle数据库中的问题,涉及两张结构相同的表TA和TB。通过Merge语句比较TA和TB,检查除主键CA1外的字段是否相同。当字段值不同时,进行更新或插入操作。解答中提到了使用nvl2和decode函数来判断并更新不同字段,只有所有字段都相同或TA的字段为空时,才不执行更新。
摘要由CSDN通过智能技术生成

问题:

       已知两张表TA、TB,这两张表的表结构完全相同。现在有这样的要求,TA是根据要求按一定频率抽取的数据,TB是保存发生变化的表。每次抽取TA表,都会比较TA、TB表,看这两个表中是否存在完全一样的数据项值。

例子:

 

      TA、TB的主键是CA1,则使用TA和TB表中的其他字段值比较(on TA.CA1=TB.CA1).eg

Merge TB

using TA

on (TA.CA1=TB.CA1)

when matched then

    ...(比较其他字段是否相同,存在不同的记录更新记录)

when not matched then

  ...(插入新的记录)

 

分析:

 

当比较其他字段是否相同时,存在这样的几种情况:

TA.CA2  TB.CA2  操作

  null      null      不执行

  'a'        null      A覆盖B

 null       'a'        不执行

  'a'        'a'        不执行

  'b'        'a'        A覆盖B

 

解答:

 

对于这种情况

我们可以使用两个函数结合来操作

update set

TA.ca2 = TB.ca2,

TA.ca3 = TB.ca3,

TA.ca4 = TB.ca4,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值