mysql 数据库超强删除重复数据语句

月小升今天遇到的问题是students这个表有md这个字段重复。看看如何处理吧。

 代码如下 复制代码

select * from students
where md in (select md from students group by md having count(md) > 1) order by md

注明,这个被group的字段,请索引,否则很慢

 代码如下 复制代码
delete from students
where md in (select md from students group by md having count(md) > 1)
and id not in (select min(id) from students group by md having count(md )>1)

这个语句在mysql下会报错

#1093 – You can’t specify target table ‘students’ for update in FROM clause

原因是好像mysql不准许我们进行联合删除内有条件语句指向自己的表。

策略是使用临时表,存储那些要删除的ID

 代码如下 复制代码

create table tmp (id int);

insert into tmp (id) select id from students
where md in (select md from students group by md having count(md) > 1)
and id not in (select min(id) from students group by md having count(md )>1);

delete from students where id in (select id from tmp);

得出会被删除的数据

 代码如下 复制代码

select * from students
where md in (select md from students group by md having count(md) > 1)
and id not in (select min(id) from students group by md having count(md )>1)

得出过滤后的数据,不删除的数据。如果不用删除,此sql语句可以用来显示唯一数据

 代码如下 复制代码

select * from students
where
id in (select min(id) from students group by md having count(md )>1)

时间: 2024-07-29 23:02:04

mysql 数据库超强删除重复数据语句的相关文章

MySQL数据库中删除重复记录的方法总结[推荐]_Mysql

表结构: mysql> desc demo; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(11) unsigned | NO | PRI | NULL

MySQL 数据库中删除重复记录方法总结

MYSQL数据库中,经常会遇到重复记录的情况,那么就需要SQL删除重复记录,下面为您列举了四种删除重复记录的方式,用于不同的情况,希望对您有所帮助. 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断  代码如下 复制代码 select * from people  where peopleId in (select   peopleId from   people group by   peopleId having count(peopleId) > 1)    

删除mysql数据库中的重复数据记录_Mysql

采用的是下面的方法可删除,假设重复的是test数据库中的title字段  复制代码 代码如下: create table bak as (select * from test group by title having count(*)=1);      insert into bak (select * from test group by title having count(*)>1);         truncate table test;         insert into te

教你高效删除Oracle数据库中的重复数据

重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等. 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样.Oracle数据库重复数据删除技术有如下优势:更大的备份容量.数据能得到持续验证.有更高的数据恢复服务水平.方便实现备份数据的容灾. 一.删除部分字段重复数据 先来谈谈如何查询重复的数据吧. 下面语句可以查询出那些数据是重复的: select 字段1,字段2,count(*)

PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)_php技巧

本文实例讲述了PHP查询并删除数据库多列重复数据的方法.分享给大家供大家参考,具体如下: <?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } $db_selected = mysql_select_db("test_db", $con); if (!$db

Mysql中如何查找并删除重复数据

考试系统中做了一个用户导入试题功能,导致用户导入了很多重复的试题,我需要查询及删除一下重复的记录,于是有了这篇文章. (一)单个字段 1.查找表中多余的重复记录,根据(question_title)字段来判断  代码如下 复制代码 select * from questions where question_title in (select question_title from people group by question_title having count(question_title

MySQL中删除重复数据的简单方法_Mysql

MYSQL里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,在网上找了一圈,好多是用NOT IN这样的代码,这样效率很低,自己琢磨组合了一下,找到一个高效的处理方式,用这个方式,五百万数据,十来分钟就全部去除重复了,请各位参考. 第一步:从500万数据表data_content_152里提取出不重复的字段SFZHM对应的ID字段到TMP3表 create table tmp3 as select min(id) as col1 from data_content

删除重复数据sql语句

删除重复数据sql语句 方法一 假设有重复的字段为name,address,要求得到这两个字段唯一的结果集 select identity(int,1,1) as autoid, * into #tmp from tablename select min(autoid) as autoid into #tmp2 from #tmp group by name,autoid select * from #tmp where autoid in(select autoid from #tmp2) 方

mysql查找删除重复数据并只保留一条实例详解

有这样一张表,表数据及结果如下: school_id school_name total_student test_takers 1239 Abraham Lincoln High School 55 50 1240 Abraham Lincoln High School 70 35 1241 Acalanes High School 120 89 1242 Academy Of The Canyons 30 30 1243 Agoura High School 89 40 1244 Agour