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

三、由于本表的 两个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值