SQL 联合主键跨表删除最小时间那条重复数据,跨表 for UPdate

一、过滤出需要删除的重复数据的ID
SQL 联合主键跨表删除最小时间那条重复数据,跨表 for UPdate
文章图片

selectaac001from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
where std_app.check_flag=2 group by aac001 having count(*)>1
二、过滤出需要删除的最小时间那条数据的ID
select aac001,min(app_date) app_date
from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
where std_app.check_flag=2
and aac001 in (
selectaac001from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
where std_app.check_flag=2 group by aac001 having count(*)>1
)
group by aac001
SQL 联合主键跨表删除最小时间那条重复数据,跨表 for UPdate
文章图片

三、由于本表的 两个ID是联合主键所以 必须取到最小时间的ID1和ID2 然后相加做为需要删除的 主键
selectstd_app.app_id+ei_app_recheck_citi_id.aac001from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
inner join (
select aac001,min(app_date) app_date
from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
where std_app.check_flag=2
and aac001 in (
selectaac001from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
where std_app.check_flag=2 group by aac001 having count(*)>1
)
group by aac001
) a on a.aac001=ei_app_recheck_citi_id.aac001
where std_app.check_flag=2 and std_app.app_date=a.app_date

四、开始For Update 删除将之前查询出的两个字段相加 然后作为需要删除的条件
select* from ei_app_recheck_citi_id
where ei_app_recheck_citi_id.app_id+ei_app_recheck_citi_id.aac001 in

(
selectstd_app.app_id+ei_app_recheck_citi_id.aac001from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id

inner join (
【SQL 联合主键跨表删除最小时间那条重复数据,跨表 for UPdate】
select aac001,min(app_date) app_date
from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
where std_app.check_flag=2
and aac001 in (

selectaac001from ei_app_recheck_citi_id
inner join std_app on std_app.app_id=ei_app_recheck_citi_id.app_id
where std_app.check_flag=2 group by aac001 having count(*)>1
)
group by aac001
) a on a.aac001=ei_app_recheck_citi_id.aac001
where std_app.check_flag=2 and std_app.app_date=a.app_date

) for update

    推荐阅读