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

    技术2022-05-19  47

    问题:

           已知两张表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,

    TA.ca5 = TB.ca5

    when

    nvl2(TA.ca2,decode(TA.ca2,TB.ca2,0,1),0)+

    nvl2(TA.ca3,decode(TA.ca3,TB.ca3,0,1),0)+

    nvl2(TA.ca4,decode(TA.ca4,TB.ca4,0,1),0)+

    nvl2(TA.ca5,decode(TA.ca5,TB.ca5,0,1),0)

    >0;

     

    这里,如果存在任何一个字段不相同,则when处的nvl2就返回1,其结果是大于0的,当所有的值都相同或TA.caX是空时才为0.

    这种思想非常好。


    最新回复(0)