首页 > 解决方案 > 更新并插入 MERGE 查询

问题描述

我有以下查询:

MERGE INTO member_staging x
USING (SELECT member_id, first_name, last_name, rank, startdate, enddate FROM members) y
ON (x.member_id  = y.member_id)
WHEN MATCHED THEN
    UPDATE SET x.first_name = y.first_name, 
                        x.last_name = y.last_name, 
                        x.rank = y.rank,
                        enddate = GETDATE();
    WHERE x.first_name <> y.first_name OR 
           x.last_name <> y.last_name OR 
           x.rank <> y.rank 
WHEN NOT MATCHED THEN
    INSERT(x.member_id, x.first_name, x.last_name, x.rank)  
    VALUES(y.member_id, y.first_name, y.last_name, y.rank);

我想在更新后使用新值和 SYSDATE 在 startdate 和 9999/12/31 在 enddate 更新后插入新记录。

这是一个例子:

member_id first_name last_name rank startdate  enddate
1         John       LeBlanc   12   2021/09/10 9999/12/31

如果记录更新,排名变为 9:

member_id first_name last_name rank startdate  enddate
1         John       LeBlanc   12   2021/09/10 2021/09/16
1         John       LeBlanc   9    2021/09/17 9999/12/31

将更新旧版本并添加新版本,将 +1 添加到 startdate 以避免重叠。

标签: sqloracle

解决方案


推荐阅读