【问题标题】:Update the changed row of target table only using source table if there is any value mismatch between 2 columns如果 2 列之间存在任何值不匹配,则仅使用源表更新目标表的更改行
【发布时间】:2020-02-21 04:51:25
【问题描述】:

表 T1

ID  C1  C2  C3
--  --  --  --
1   x   y   z
2   p   q   r
3   a   b   c

表 T2

1   x   y   z
2   p   q1  r
3   a   b   c1

需要将 T2 的所有值更新到 T1 以确保两个表应该具有相同的值。这可以通过合并语句来实现。但是在表 T1 中有一个列 update_timestamp 只有当两个表之间存在任何不匹配时才会更新。在合并中,如果没有不匹配,update_timestamp 也会更新。在上面的示例中,update_timestamp 列仅更新 ID 2 和 3。

MERGE INTO T1
USING T2
ON (T1.ID = T2.ID)
WHEN MATCHED THEN
UPDATE SET T1.C1 = T2.C1,T1.C2 = T2.C2,T1.C3 = T2.C3,T1.update_timestamp=SYSDATE;

【问题讨论】:

    标签: sql oracle sql-merge


    【解决方案1】:

    试试这个(如果您跟踪所有 3 列的更改 - c1、c2 和 c3):

    MERGE INTO T1
    USING (
      select id, c1, c2, c3 from T2
      minus
      select id, c1, c2, c3 from T1
    ) T2
    ON (T1.ID = T2.ID)
    WHEN MATCHED THEN
    UPDATE SET T1.C1 = T2.C1,T1.C2 = T2.C2,T1.C3 = T2.C3,T1.update_timestamp=SYSDATE;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2012-06-16
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多