Oracle - 多列上的条件合并

时间:2013-07-24 08:43:22

标签: sql oracle

我正在使用以下查询在单个表上运行合并:

    MERGE INTO tbl rs
    USING 
    SELECT res.sid, res.eid, res.a, res.b, res.c, res.d, res.e /* ... */
    /* Merge magic here */
    WHEN MATCHED THEN
        UPDATE SET rs.a = res.a, rs.b = res.b, rs.c = res.c, rs.d = res.d, rs.e = res.e;

现在,当一列包含与原始数据不同的数据时,更新将在给定行的所有5列上运行。有没有办法限制更新只更新不同的列,并省略没有不同数据的列?

1 个答案:

答案 0 :(得分:0)

这不是您要求的,但您可以将更新限制为具有至少一个更改值的行,并在更新中使用WHERE子句:

MERGE INTO tbl rs
USING 
  (SELECT res.sid, res.eid, res.a, res.b, res.c, res.d, res.e /* ... */ )
ON ( /* Merge magic here */ )
WHEN MATCHED THEN    
UPDATE SET 
      rs.a = res.a, 
      rs.b = res.b, 
      rs.c = res.c, 
      rs.d = res.d, 
      rs.e = res.e
WHERE rs.a <> res.a 
   OR rs.b <> res.b 
   OR rs.c <> res.c 
   OR rs.d <> res.d 
   OR rs.e <> res.e;

(取决于您的数据/应用程序逻辑,您可能希望为NULL值添加额外的检查)。