精华内容
下载资源
问答
  • mysql删除重复数据
    2022-07-11 16:50:45
    DELETE
    FROM crm_partner_engineer_one_to_many
    WHERE employee_id IN(SELECT
    	employee_id
    		FROM (SELECT
    			employee_id
    			FROM crm_partner_engineer_one_to_many
    			GROUP BY employee_id
    			HAVING COUNT(employee_id) > 1) a)
    	AND pk_id NOT IN(SELECT
    			*
    			FROM (SELECT
    			MIN(pk_id)
    			FROM crm_partner_engineer_one_to_many
    			GROUP BY employee_id
    			HAVING COUNT(employee_id) > 1) b);
    			
    
    更多相关内容
  • 业务中遇到要从表里删除重复数据的需求,使用了下面的方法,执行成功,大家可以参考使用
  • 在网上查找删除重复数据保留id最小的数据,方法如下: DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GROUP BY peopleName HAVING count(peopleName) > 1 ) AND peopleId ...
  • mysql删除重复数据

    千次阅读 2022-04-06 17:57:13
    /*查询重复数据*/ SELECT * FROM index_price WHERE ( fund_number, date ) IN ( SELECT fund_number, date FROM... /*删除重复数据,一次只删除每组重复数据中的一条数据,若一组数据多次重复,要执行多次*/ D.
    /*查询重复数据*/
    SELECT
    	* 
    FROM
    	index_price 
    WHERE
    	( fund_number, date ) IN ( SELECT fund_number, date FROM index_price GROUP BY fund_number, date HAVING count(*)> 1 ) 
    ORDER BY
    	fund_number,
    	date DESC;
    	
    	/*删除重复数据,一次只删除每组重复数据中的一条数据,若一组数据多次重复,要执行多次*/
    	
    DELETE 
    FROM
    	index_price 
    WHERE
    	id IN (
    	SELECT
    		id 
    	FROM
    		(
    		SELECT
    			max( id ) id 
    		FROM
    			index_price 
    		WHERE
    			( fund_number, date ) IN ( SELECT fund_number, date FROM index_price GROUP BY fund_number, date HAVING count(*)> 1 ) 
    		GROUP BY
    			fund_number,
    			date 
    		) t 
    	)

    展开全文
  • MySql删除重复数据(只保留一条)

    万次阅读 多人点赞 2021-07-22 22:01:43
    MySql删除重复数据 1. 问题引入 前一段遇到MySql数据重复的问题。由于重复向同一张表导入同一批数据,导致前台展示的数据重复,唯一方便快捷的方法莫过于利用delete操作删除重复数据(已经封板发布),只保留其中一条...

    MySql删除重复数据

    1. 问题引入

    前一段遇到MySql数据重复的问题。由于重复向同一张表导入同一批数据,导致前台展示的数据重复,唯一方便快捷的方法莫过于利用delete操作删除重复数据(已经封板发布),只保留其中一条数据。但真的是书到用时方恨少,技术也如此。当时只好在网上搜索资源,最终解决了燃眉之急。但是对找到的delete语句并不是太理解,后来抽时间自己研究了一下。现在稍微理解了一点,分享给大家,希望对大家有帮助。

    2.数据准备

    • 创建表
    	CREATE TABLE test_del_repetition(
    	querymonth VARCHAR(6) DEFAULT NULL COMMENT '查询年月',
    	province VARCHAR(15) DEFAULT NULL COMMENT '省份',
    	city VARCHAR(15) DEFAULT NULL COMMENT '城市',
    	population INT(10) DEFAULT 0 COMMENT '人口(万)',
    	KEY pro (province) USING BTREE,
    	KEY cit (city) USING BTREE,
    	KEY pop (population) USING BTREE,
    	KEY synthesis (province,city,population) USING BTREE
    	)ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
    
    • 插入数据
    insert into test_del_repetition values('202107','河南省','南阳市',1002);
    insert into test_del_repetition values('202107','河南省','郑州市',956);
    insert into test_del_repetition values('202107','河南省','周口市',880);
    insert into test_del_repetition values('202107','河南省','驻马店市',695);
    insert into test_del_repetition values('202107','河南省','洛阳市',674);
    insert into test_del_repetition values('202107','河南省','信阳市',640);
    insert into test_del_repetition values('202107','河南省','新乡市',572);
    insert into test_del_repetition values('202107','河南省','安阳市',511);
    insert into test_del_repetition values('202107','河南省','濮阳市',361);
    

    3.delete操作

    经过私下测试发现造成重复数据的原因主要有两种,一种是重复导入同一批数据,造成每一条数据都存在重复现象;
    另一种情况是数据处理不当,数据中个别几条数据存在重复。

    3.1 情况一: 重复导入同一批数据

    • 数据模拟
    #第一次插入
    insert into test_del_repetition values('202107','河南省','南阳市',1002);
    insert into test_del_repetition values('202107','河南省','郑州市',956);
    insert into test_del_repetition values('202107','河南省','周口市',880);
    insert into test_del_repetition values('202107','河南省','驻马店市',695);
    insert into test_del_repetition values('202107','河南省','洛阳市',674);
    insert into test_del_repetition values('202107','河南省','信阳市',640);
    insert into test_del_repetition values('202107','河南省','新乡市',572);
    insert into test_del_repetition values('202107','河南省','安阳市',511);
    insert into test_del_repetition values('202107','河南省','濮阳市',361);
    #第二次插入
    insert into test_del_repetition values('202107','河南省','南阳市',1002);
    insert into test_del_repetition values('202107','河南省','郑州市',956);
    insert into test_del_repetition values('202107','河南省','周口市',880);
    insert into test_del_repetition values('202107','河南省','驻马店市',695);
    insert into test_del_repetition values('202107','河南省','洛阳市',674);
    insert into test_del_repetition values('202107','河南省','信阳市',640);
    insert into test_del_repetition values('202107','河南省','新乡市',572);
    insert into test_del_repetition values('202107','河南省','安阳市',511);
    insert into test_del_repetition values('202107','河南省','濮阳市',361);
    
    • 删除数据
    #假设一批数据本该有m条,重复导入n次,则应该删除m*(n-1)条数据
    #或者说不清楚数据本该有多少条,但根据日志得知重复导入了x次,目前总的数据量是y条,则应该删除y*((x-1)/x)条
    
    #测试数据本应该有9条,由于重复操作2次,故应该删除掉重复的9条数据
    #1.查出重复数据
    select a.province from (select province,count(1) from test_del_repetition  group by province having count(1)>1)a;
    #删除重复的9条数据
    delete from test_del_repetition where province in (select a.province from (select province,count(1) from test_del_repetition  group by province having count(1)>1)a) limit 9;
    

    以上这种情况只适用于同一批数据重复导入多次,此时不需要考虑主键的问题,任意一个字段都可以作为上述的条件字段,进行数据删除。
    limit后面跟的就是需要删除数据的条数,也即m*(n-1)或者y*((x-1)/x)

    3.2 情况二: 数据处理不当,个别数据重复

    • 数据模拟
    insert into test_del_repetition values('202106','河南省','南阳市',1001);
    insert into test_del_repetition values('202107','河南省','南阳市',1002);
    insert into test_del_repetition values('202106','河南省','郑州市',955);
    insert into test_del_repetition values('202107','河南省','郑州市',956);
    insert into test_del_repetition values('202106','河南省','周口市',879);
    insert into test_del_repetition values('202107','河南省','周口市',880);
    insert into test_del_repetition values('202106','河南省','驻马店市',694);
    insert into test_del_repetition values('202107','河南省','驻马店市',695);
    insert into test_del_repetition values('202106','河南省','安阳市',510);
    insert into test_del_repetition values('202107','河南省','安阳市',511);
    insert into test_del_repetition values('202106','河南省','濮阳市',360);
    insert into test_del_repetition values('202107','河南省','濮阳市',361);
    insert into test_del_repetition values('202107','河南省','濮阳市',361);
    insert into test_del_repetition values('202107','河南省','濮阳市',361);
    
    • 删除数据
    #上面的数据只有濮阳数据存在重复,并且只有202107月的濮阳数据重复,此时就要找到表的业务主键,根据表结构可以得出业务主键是querymonth和city。
    
    #1.获取重复数据以及数据重复次数,示例数据为 ‘202107 濮阳市 3’,也就是重复了3次,则要删除多余的2条数据
    select querymonth,city,count(1) from test_del_repetition  group by querymonth,city having count(1)>1)a;
    #2.删除重复数据
    delete from test_del_repetition where querymonth='202107' and city ='濮阳市' limit 2;
    

    上面这种情况针对重复的数据,不能像第一种那样整批删除。比如说重复数据有:

    querymonthcitycount(1)
    202107濮阳市3
    202107南阳市4

    濮阳重复三次,南阳重复四次,则要根据业务主键分批删除重复数据。当然这种情况也可能有更简便的方法,但是目前能力有限,希望有经验的大佬可以给出更好的答案。

    本次分享到此结束,希望我的分享能给大家带来些许的便利,如果存在错误理解,也希望各位能提出来共同学习。祝大家工作顺利~

    展开全文
  • 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ... 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowi...

    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

    select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

    2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

    delete from people  where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

    3、查找表中多余的重复记录(多个字段)

    select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

    delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

    select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

    这个很简单嘛,上sql语句

    delete from zqzrdp where tel in (select min(dpxx_id) from zqzrdp group by tel having count(tel)>1);

    执行,报错!!~!~

    bf9e87b977d54a5dcebddbae2d4cebe3.png

    异常意为:你不能指定目标表的更新在FROM子句。傻了,MySQL 这样写,不行,让人郁闷。

    难倒只能分步操作,蛋疼

    以下是网友写的,同样是坑爹的代码,我机器上运行不了。

    1. 查询需要删除的记录,会保留一条记录。

    select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid

    2. 删除重复记录,只保留一条记录。注意,subject,RECEIVER 要索引,否则会很慢的。

    delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid;

    3. 查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

    select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

    4. 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

    delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

    5.删除表中多余的重复记录(多个字段),只留有rowid最小的记录

    delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

    看来想偷懒使用一句命令完成这个事好像不太显示,还是老老实实的分步处理吧,思路先建立复制一个临时表,然后对比临时表内的数据,删除主表里的数据

    alter table tableName add autoID int auto_increment not null;

    create table tmp select min(autoID) as autoID from tableName group by Name,Address;

    create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID;

    drop table tableName;

    rename table tmp2 to tableName;

    展开全文
  • 主要介绍了mysql查找删除重复数据并只保留一条实例详解的相关资料,需要的朋友可以参考下
  • MySQL删除重复数据并保留最新的一条,网上有些博客写的有问题,因为他们只考虑到或者说他们的重复数据最多只有两条,当重复数据大于2时,就会出现问题。 案例描述: 按天删除表中重复数据只保留最新的一条(这里...
  • Mysql删除重复数据

    千次阅读 2020-06-08 15:40:53
    数据表: mysql> select * from students; +---------+-----+--------+ | name | age | stu_id | +---------+-----+--------+ | lisi | 19 | 1 | | aaa | 10 | 2 | | bbb | 10 | 3 | | ccc | 19 | 4 | | ddd | 19...
  • delete a from yield_produce a join (select roll_plan_no,in_mat_no,out_mat_no,count(*),max(id) as id,line_no from yield_produce group by roll_plan_no,in_mat_no,out_mat_no,line_no HAVING count(*)>...
  • 查重是我们在工作中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...
  • 主要介绍了MySQL删除重复数据的简单方法,比起一般的NOT IN语句的效率更为高,需要的朋友可以参考下
  • 我有一个保存手机短信的收据表 结构是这样的 表名sms,字符串userid,字符串smsid,长字符串content,主键id 但是因为有些短信数据会重复上传...我现在要删除所有userid和smsid相同的重复数据保留一条,有主键,要怎么做
  • 要查找重复数据,我们可以使用mysql里的having语句,如图。 执行这个语句后,我们可以看到现在的结果里显示的就是表中重复数据的字段。 要删除这些重复的数据,我们找出这些数据的ID,在select语句里,添加id字段...
  • MySQL删除重复数据中id最大的数据

    千次阅读 2019-04-17 18:37:51
    SQL如下 DELETE --删除 ... personnum IN (--重复数据中 SELECT n.PERSONNUM FROM ( SELECT a.PERSONNUM FROM person a WHERE a.PERSONNUM IN ( SELECT ...
  • MySQL如何删除重复数据

    千次阅读 2020-11-18 18:47:11
    文章目录初始化实验环境明确需求查找重复的数据查找要保留的数据删除重复数据方法一方法二方法三写法1写法2总结 MySQL中经常会遇到重复的数据,那么当我们遇到重复的时候的时候,如果定位哪些数据是有重复的记录?...
  • MySql删除重复数据

    千次阅读 2017-11-23 10:44:27
    Mysql中需要将表中某一个或多个字段值重复数据删掉,从网上查了大部分sql形式如下,执行会报错 错误提示:不能在同一个sql语句中,先select一个表,然后再update这个表,有点类似于Java中不能在普通for each...
  • 今天需要删除数据库中某个字段(source_id)的重复数据,但是又要保留其中最新的一条,思路是: 根据该字段分组,获取分组中最大的那一条,用not in 包裹,然后执行delete语句。中间遇到了两个问题,第一个就是报错...
  • mysql删除重复数据

    千次阅读 2022-01-13 17:15:23
    mysql数据库中可能会出现没有唯一约束导致的数据会有多条的问题,那么我们怎么删除多余的数据只保留其中一条数据。这里有一些方法可以快速进行删除多余的数据 新建示例表结构和数据 CREATE TABLE `user` ( ...
  • mysql 删除重复数据

    千次阅读 2017-11-22 16:12:28
    mysql删除重复数据 今天工作时遇到了一个问题,将mysql中一个表里面的重复数据删除掉,用了多种方法一直提示错误,在网上查了半天终于解决了。 例如:需要删除A表中uid字段重复的数据,具体操作如下: 首先查询出不...
  • mysql|mysql删除重复数据,一条sql就搞定
  • mysql 删除重复数据只保留一条记录

    万次阅读 2017-07-15 10:22:33
    删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id from order_info group by order_number) as b); delete from table where id not in ...
  • mysql去除重复数据

    千次阅读 2022-04-19 16:25:29
    mysql去除重复数据 根据one列查询重复的数据(根据单列判断重复) SELECT * FROM tab_test WHERE ONE IN (SELECT ONE FROM testdelete GROUP BY ONE HAVING COUNT(ONE) > 1) 删除表中的重复记录:(根据单列删除且...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 221,406
精华内容 88,562
关键字:

mysql删除重复数据

mysql 订阅
友情链接: 插入图像块.rar