首先找到关联字段,通过关联字段去找到对应的关系
MERGE INTO t_driver t1
USING (select *
from (select row_number() over(partition by a.DRIVER_LICENSE_NUMBER order by a.driver_id desc) rd,
a.*,
a.rowid row_id
from T_DRIVER_SYNC a)
where rd = 1) t2
ON ( t1.DRIVER_LICENSE_NUMBER = t2.DRIVER_LICENSE_NUMBER )
WHEN MATCHED THEN
UPDATE SET t1.NEXT_CHECK_DATE = t2.NEXT_CHECK_DATE ,
t1.DRIVER_LICENSE_STATUS = t2.DRIVER_LICENSE_STATUS,
t1.CHANGE_LICENSE_DATE=t2.CHANGE_LICENSE_DATE,
t1.CLEAR_SCORE_DATE=t2.CLEAR_SCORE_DATE
该SQL使用row_number()函数,把重复记录排序,然后子查询只取rd=1的行,这样的子查询生成的记录都是只有一条,再执行语句,就高枕无忧啦,再也不怕数据源表重复数据错误提示了啊。
如果是临时表,存在数据重复,还可以将重复数据删除,从而执行merge不报错。
原文链接:https://blog.csdn.net/zhanglu0223/article/details/28428573