zoukankan      html  css  js  c++  java
  • MySQL删除数据表中重复数据

    今天遇到一个问题,数据表的数据有重复的,关键原因在于新增数据时,没有根据条件先判断数据是否存在,当数据存在时进行有关条件的更新,不存在时做新增数据。

    对于表中已经存在的数据处理办法的方法:

    1.先根据条件进行统计数据重复率。

    2.查询那一些数据是重复的,将重复数据放在一张表中用于条件对比将源数据中的重复数据删除(mysql中使用一张表,sqlserver中可以使用临时表或者表变量存放数据)。

    3.根据条件关联将重复数据删除。

    可以先查询重复数据的总数:

    select sum(count)
    from(
    select bidsectioncode,count(bidsectioncode) as count from businessdata.business_bidsection
    group by bidsectioncode having count>1
    order by create_time desc
    ) as d;

    查出数据库中的重复记录的数据中的一条,这个不难,很简单的,sql语句如下:

    select * from businessdata.business_bidsection
     where bidsectioncode in (select  bidsectioncode from businessdata.business_bidsection  group  by  bidsectioncode   having  count(bidsectioncode) > 1) 
    and id in (select min(id) from  businessdata.business_bidsection  group by bidsectioncode having count(bidsectioncode)>1)

    这些都是不重复的,换句话说都是要保留的,不被删掉的,而其余与这些结果中name相同的应该被删掉。

    也就是说将上边那个sql语句id后边加一个not ,查出来的结果就是要删掉的。

    select * from businessdata.business_bidsection
     where bidsectioncode in (select  bidsectioncode from businessdata.business_bidsection  group  by  bidsectioncode   having  count(bidsectioncode) > 1) 
    and id not in (select min(id) from  businessdata.business_bidsection  group by bidsectioncode having count(bidsectioncode)>1)

    我把这些需要删掉的存到另外一个表里,然后我新建一个business_bidsection_test表,结构复制business_bidsection的结构就好了。

    复制一个创建语句到test表中。

    然后将重复数据添加到test表中,插入语句是:

    insert into business_bidsection_test
    (select * from businessdata.business_bidsection
     where bidsectioncode in (select  bidsectioncode from businessdata.business_bidsection  group  by  bidsectioncode   having  count(bidsectioncode) > 1) 
    and id not in (select min(id) from  businessdata.business_bidsection  group by bidsectioncode having count(bidsectioncode)>1));

    那接下来做的就是删掉business_bidsection表里边与business_bidsection_test表的id相同的数据。

    delete a.* from business_bidsection a, business_bidsection_test b where a.id = b.id ;

    这样的结果就是完全不重复的,但是id是不连续的。

  • 相关阅读:
    追寻缺失的大学精神 一个民族需要关注天空的人
    图论简介
    18个分形图形的GIF动画演示
    平行宇宙
    eclipse经常出现——未响应!!!
    单例模式
    Java内存区域
    编译与解释(java)
    正则表达式判断QQ号格式是否正确
    正则表达式判断手机号格式是否正确
  • 原文地址:https://www.cnblogs.com/kongxiaoshuang/p/6877454.html
Copyright © 2011-2022 走看看