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

一、过滤出需要删除的重复数据的ID


select  aac001  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 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 (

select  aac001  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 group by aac001 having count(*)>1
                        )
group by aac001

SQL 联合主键跨表删除最小时间那条重复数据,跨表 for UPdate_第1张图片

三、由于本表的 两个ID是联合主键所以 必须取到最小时间的ID1和ID2 然后相加  做为需要删除的 主键

select  std_app.app_id+ei_app_recheck_citi_id.aac001  from 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 (

select  aac001  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 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

 

(
select  std_app.app_id+ei_app_recheck_citi_id.aac001  from 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 (

 

select  aac001  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 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

你可能感兴趣的:(SQL)