MySQL 删除表中重复数据,保留最小ID值

使用SQL语句,删除表中重复的项,保留最小的ID;

在表 tabel 1中,存在大量重复数据,需要删除重复项,且保存 ID 为最小的那条记录。

tabel 1表中【jzmdid】数据重复
IDjzmdidaac002aac003yj_month
100013002----201805
100023002----201805
100033003----201805
100043004----201805
[SQL] 
delete from table1  WHERE jzmdid in  
( select jzmdid from table1 where yj_month='201805' GROUP BY jzmdid
  HAVING COUNT(jzmdid) >1)  
  and id not in 
( select min(id) as minid
  from table1 where  yj_month='201805' group by jzmdid having count(jzmdid)>1 ) ;

[Err] 1093 - You can't specify target table 'table1' for update in FROM clause

[Err] 1093 - You can't specify target table 'table1' for update in FROM clause

分析:Mysql 中Delete和Update 语句,不允许子查询中出现update和delete要操作表

解决方法:给子查询外面再加一个查询

1、删除重复记录,保存 ID最小的一条

-- 1、删除重复记录,保存Id最小的一条
 delete from table1  WHERE yj_month='201805' and jzmdid in  
  ( select * from (
    select jzmdid from table1 where yj_month='201805' GROUP BY jzmdid 
      HAVING COUNT( jzmdid ) >1) s
       ) and id not in 

        ( select minid from (
           select min(id) as minid
            from table1
             where  yj_month='201805' 
              group by jzmdid having count(jzmdid )>1 ) b) ; 

受影响的行: 431250
时间: 106.209s

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值