Oracle Merge - 我可以做类似"When Not Matched Then Delete"的事情吗?



我有一个表(t1(,其中包含一个唯一的患者列表。我有另一张表(t1_Backup(,上面有重复的患者和详细信息列表。我想本质上执行一个内部联接来更新t1,它为t1_Backup中包含的细节列设置了空值。t1_Backup还有一些我要在联接中删除的记录。

MERGE INTO t1
USING (SELECT * FROM
(SELECT t1_Backup.*
,RANK() OVER (PARTITION BY Patient_ID ORDER BY Col1 DESC, Col2 DESC, ...) AS Pick
FROM t1_Backup
WHERE Active_Status = 'A')
WHERE Pick = 1)
t2 ON (t1.Patient_ID = t2.Patient_ID)
WHEN MATCHED THEN UPDATE
SET
t1.Col1 = t2.Col2
t1.Col2 = t2.Col2
....

ad infinitum(不是字面意思,但正如你可能猜到的,我只更新了大量的列——整个练习是从t2中删除重复项的精心尝试。数据很复杂,但如果有人对其他方法有建议,我会洗耳恭听。(

对于那些密切关注的人来说,你可能已经注意到Active_Status = 'A'标准可能会产生限制性影响,导致我有一些Patient_ID没有更新。考虑到我的要求,我实际上想简单地将这些行放在一个快速、整洁的步骤中。

简而言之,我的问题是是否可以添加一行代码,如WHEN NOT MATCHED THEN DELETE

我想知道在做这样的事情之前应该期待什么。谢谢

指定DELETE where_clause以在填充或更新表中的数据。受此子句影响的行只有目标表中由合并操作更新的行。DELETE WHERE条件计算的是更新后的值,而不是UPDATE SET计算的原始值。。。WHERE条件。如果目标表的某行满足DELETE条件,但未包含在ON子句定义的联接中,则不会删除该行。在目标表上定义的任何删除触发器都将为每一行删除激活。

合并

最新更新