mysql 多字段删除重复数据,保留最小id数据

直接上sql:方法一:

delete from Route where id in (select b.id from (select * from Route a where id<>(select min(id) from Route

where payment_type=0 and point_start=a.point_start and point_end=a.point_end)
)b);

问题:一张route表。现在需要删除,payment_type=0 ,并且point_start 和point_end相同的重复数据,示例如下:

id为19,267的数据重复。20,268,269数据重复。需要保留id为19和20的。其他重复数据删除。

方法二:

 delete from Route where id in (select b.id from (select * from Route  where (point_start,point_end)in( select point_start,point_end from Route a where payment_type=0 group by point_start,point_end having count(*)>1)
 and id not in (select min(id) from Route t group by t.point_start,t.point_end having count(*)>1))b);

两种方法都能满足需求。至于性能方面。哪个好,没怎么测。欢迎有兴趣的测试一下,然后告诉我。

原文地址:https://www.cnblogs.com/clcliangcheng/p/9042710.html

时间: 2024-10-08 20:15:16

mysql 多字段删除重复数据,保留最小id数据的相关文章

删除多字段的重复行保留最大最小行

有张表格之前没有设计关键字段的唯一约束,导致有时候执行插入操作时不小心执行了多次就出现了重复记录,后面重新加入唯一约束,由于已经有了重复记录,无法添加,需要先删除重复记录. 看了网上的一些删除重复记录的方法(好像都是转载于同一篇文章,至少看了十几篇都是同样的内容),其中一个链接:http://blog.csdn.net/anya/article/details/6407280 自己现在是需要建立多字段唯一约束(非主键),用文中的方法是不行的,反正在SQL Server 2012中是无法通过的.改

mysql删除重复记录,保存Id最小的一条

方法1: 1.创建一个临时表,选取需要的数据. 2.清空原表. 3.临时表数据导入到原表. 4.删除临时表. mysql> select * from student; +----+------+ | ID | NAME | +----+------+ | 11 | aa | | 12 | aa | | 13 | bb | | 14 | bb | | 15 | bb | | 16 | cc | +----+------+ 6 rows in set mysql> create temporar

MySql删除重复只保留一条

本来要删除error_barcode表中barcode值重复的只保留一条 表结构如下(PS:id是自增长,该图是删除成功所以id不连续) sql语句如下: DELETE FROM error_barcode WHERE barCode IN ( SELECT barCode FROM error_barcode GROUP BY barCode HAVING count(barCode) > 1 ) AND id NOT IN ( SELECT min(id) FROM error_barcod

mysql如何快速删除重复的数据

在mysql中去重,其实是一个很简单的事情,来看下面的例子: mysql> DROP TABLE test; Query OK, 0 rows affected (0.01 sec) mysql> CREATE TABLE test ( id  INT, NAME VARCHAR(10) ); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO test VALUES(1,'a1'),(2,'a2'),(3,'a3'),(4,'

MySql 增加字段 删除字段 修改字段名称 修改字段类型

//1.增加一个字段 alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认为空 alter table user add COLUMN new2 VARCHAR(20) NOT NULL; //增加一个字段,默认不能为空 //2.删除一个字段 alter table user DROP COLUMN new2; //删除一个字段 //3.修改一个字段 alter table user MODIFY new1

linux 下备份MySQL数据库 并删除7天前的备份数据

#!/bin/bash #备份数据库hz jshuabo sdhuabo name=$(date +%Y%m%d) /alidata/server/mysql-5.1.73/bin/mysqldump -u root -p123456 hz > /root/sqlBackup/hz.$name.sql /alidata/server/mysql-5.1.73/bin/mysqldump -u root -p123456 jshuabo > /root/sqlBackup/jshuabo.$na

MySQL删除重复数据只保留一条

面试碰到一个MySQl的有趣的题目,如何从student表中删除重复名字的行,并保留最小id的记录? 很遗憾当时没有做出来,回家搜索了一番,发现利用子查询的可以很快解决. 1.删除表中多余的重复记录,重复记录是username判断,只留有id最小的记录 delete from studentwhere username in ( select username from studentgroup by username having count(username)>1) and id not i

mysql 删除重复记录语句

mysql 根据条件删除重复记录 只保留最小id的重复数据 DELETEFROM newsWHERE news_id IN ( SELECT a.news_id FROM ( SELECT news_id FROM news WHERE flag = 1 GROUP BY news_id HAVING count(news_id) > 1 ) a )AND posid NOT IN (SELECT b.posid from ( SELECT min(posid) as posid FROM ne

Mysql删除重复记录,保留id最小的一条

mysql 查询重复字段,及删除重复记录的方法MySQL, 数据库, 数据库, 字段, 服务器数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较.如果仅仅是查找数据库中name不重复的字段,很容易:SELECT min(`id`),`name` FROM `table` GROUP BY `name`; 但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值)查询哪些字段是重复的也容易:SELECT `name`,count(`name`) as count FROM `