MySql数据库去除重复的数据

今天群内有群友提出了一个问题,就是MySql中删除重复数据的问题,然后回答了一下,发现正好接触到了之前可能没关注的一点儿小知识,在此做下简要记录(哦对,昨天晚上在试用腾讯云数据库的时候还遇到一个问题,就是腾讯云数据库的Mysql对大小写是敏感的)。

OK,接下来我们进入正题,首先我按照群友的数据结构创建了一张表,填充了一部分数据,结构如下图所示:


那么我们首先来确定我们删除数据的时候的所需条件,首先找到所有重复的数据记录,使用如下sql语句进行

select * from a group by cardno having count(cardno) > 1
查询结果如下:

查询出来的是所有重复数据的第一条记录,但是这个是我们需要保留的,所以条件变成了,(改用如下的sql语句查询,根据cardno查询)重复数据中不包含本条记录的结果删除:

下午写的时候犯了个错误,这里已经更正

 查询语句如下:

select id,cardno from a where cardno in (select cardno from a group by cardno having count(cardno)>1)
and id not in(select min(id) from a group by cardno having count(cardno)>1)

这些记录是我们需要删除的,OK,接下来我们就直接删除掉这些数据就OK了,我们根据id主键来删除,sql语句如下:

delete from a where id in(select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1)
and id not in(select min(id) from a group by cardno having count(cardno)>1))
执行结果如下:


Oops!报错了,这条提示信息说的是,诶同学,在MySql里你不能先查询了然后再删除诶!哦,好吧,这个就只能等官方升级支持这个新特性了,但是我们现在就要解决这个棘手的问题啊,肿么办?我们用临时表来解决,然后我们的删除语句变成了,这个样子:

delete from a where id in (select id from (select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1)
and id not in(select min(id) from a group by cardno having count(cardno)>1)) as tmpresult)

执行,OK,可以看到我们上面查询的出来要删除的6条重复数据已经被清理掉了,结果如下:


OK,那么群里的那位朋友的问题是,他只想删除固定的卡号的话该怎么办呢?

这个就相当于附加的条件筛选了,我们直接在临时表的查询里附加条件:(注:红色加粗字体是附加条件)

delete from a where id in (select id from (select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1 <strong>and cardno=333</strong>)
and id not in(select min(id) from a group by cardno having count(cardno)>1)) as tmpresult)


这样儿就完成了Mysql删除重复数据的需求。

But,该语句尚未做系能测试,而且我这小菜儿暂时也没有时间去做这个相关的工作了,留待以后抽时间专门研究下MySql的性能,同时如果大家有更好的方式不妨直接在下方留下评论,我们共同探讨。


2014年10月12日23:40:58,EricTang记。





  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: MySQL是一个关系型数据库管理系统,用于存储和管理大量结构化数据。下面回答一些MySQL数据库数据操作题。 1. 查询表中的所有数据: 可以使用SELECT语句来查询表中的所有数据,例如: SELECT * FROM 表名; 2. 插入数据到表中: 可以使用INSERT INTO语句来向表中插入数据,例如: INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3); 3. 更新表中的数据: 可以使用UPDATE语句来更新表中的数据,例如: UPDATE 表名 SET 列名 = 新值 WHERE 条件; 4. 删除表中的数据: 可以使用DELETE语句来删除表中的数据,例如: DELETE FROM 表名 WHERE 条件; 5. 使用ORDER BY对数据进行排序: 可以使用ORDER BY子句对查询结果进行排序,例如: SELECT * FROM 表名 ORDER BY 列名 ASC/DESC; 6. 使用LIMIT限制返回的结果数量: 可以使用LIMIT关键字来限制返回的结果数量,例如: SELECT * FROM 表名 LIMIT 数量; 7. 使用GROUP BY进行分组查询: 可以使用GROUP BY子句对查询结果进行分组,例如: SELECT 列1, COUNT(列2) FROM 表名 GROUP BY 列1; 8. 使用JOIN合并表的数据: 可以使用JOIN关键字将多个表中的数据进行合并,例如: SELECT * FROM 表1 JOIN 表2 ON 表1.列 = 表2.列; 9. 使用LIKE进行模糊查询: 可以使用LIKE关键字进行模糊查询,例如: SELECT * FROM 表名 WHERE 列名 LIKE '%关键字%'; 10. 使用DISTINCT去除重复数据: 可以使用DISTINCT关键字去除查询结果中的重复数据,例如: SELECT DISTINCT 列名 FROM 表名; 以上是关于MySQL数据库数据操作的一些常见问题的回答。 MySQL具有强大的功能和灵活的语法,可用于处理各种复杂的数据操作需求。 ### 回答2: MySQL数据库是一种关系型数据库管理系统,可以用于存储、管理和操作数据。以下是对MySQL数据库数据操作题的回答: 1. 插入数据:可以使用INSERT INTO语句向数据库中插入新的数据。例如,如果有一个名为"students"的表,存储着学生的信息,可以使用如下语句插入一条新的学生记录: INSERT INTO students (name, age, gender) VALUES ('张三', 20, '男'); 2. 更新数据:可以使用UPDATE语句来更新数据库中的数据。例如,如果要将学生"张三"的年龄更新为21岁,可以使用如下语句: UPDATE students SET age = 21 WHERE name = '张三'; 3. 删除数据:可以使用DELETE FROM语句来删除数据库中的数据。例如,如果要删除名为"students"的表中的所有学生记录,可以使用如下语句: DELETE FROM students; 4. 查询数据:可以使用SELECT语句来查询数据库中的数据。例如,如果要查询名为"students"的表中所有学生的信息,可以使用如下语句: SELECT * FROM students; 这将返回该表中所有的学生记录。 5. 排序数据:可以使用ORDER BY子句对查询结果进行排序。例如,如果要按照学生的年龄降序排列查询结果,可以使用如下语句: SELECT * FROM students ORDER BY age DESC; 这将返回按照年龄降序排列的所有学生记录。 通过以上操作,可以实现对MySQL数据库中的数据进行插入、更新、删除和查询等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值