【发布时间】:2020-09-29 01:23:54
【问题描述】:
我有一张表 (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?
我想知道在运行类似的东西之前会发生什么。谢谢!
【问题讨论】:
标签: sql oracle merge inner-join