前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Mysql删除重复数据

Mysql删除重复数据

作者头像
华创信息技术
发布于 2020-03-09 02:35:01
发布于 2020-03-09 02:35:01
17.6K10
代码可运行
举报
文章被收录于专栏:华创信息技术华创信息技术
运行总次数:0
代码可运行

文章时间:2020年3月8日 19:27:36 解决问题:删除表中的重复数据 基于数据库:Mysql 5.7 version

查询重复数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT openid,COUNT(openid)
FROM  表名 
GROUP BY openid
HAVING  COUNT(openid) > 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

上面提供两种写法,直接复制粘贴替换相应的字段即可。

删除重复数据

删除全部的重复数据(注意! 注意! 注意! 这是全部删除,不是只保留一条的,只保留一条的继续看后面)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE
FROM
    表名
WHERE
    dname IN (
        SELECT
            t.字段名
        FROM
            ( select 字段名
            FROM 表名
         GROUP BY
            字段名
        HAVING
            count(1) > 1
            ) t
    )

只保留一条,去掉重复的数据(执行效率我没做测试,能实现,效率自己测试下吧)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE
FROM
    表名
WHERE
    这里写你的表id NOT IN (
        SELECT
            t.minno
        FROM
            (
                SELECT
                    MIN(id) AS minno
                FROM
                    表名
                GROUP BY
                    字段名
            ) t
)

不解的报错

[Err] 1093 - You can't specify target table 'dept' for update in FROM clause 原因:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作。所以我们用生成临时表去操作,上面的语句就是这么写的。复制即可。

参考文献

  • mysql删除重复记录并且只保留一条:https://blog.csdn.net/n950814abc/article/details/82284838
  • PostgreSQL中删除重复行(保留一行):https://blog.csdn.net/ljy520yzy/article/details/8631264
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-8 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
我有一张表,228多万条数据,使用该sql,效率很差,迟迟运行不出来,请问有什么方式可以优化
我有一张表,228多万条数据,使用该sql,效率很差,迟迟运行不出来,请问有什么方式可以优化
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
oracle中如何删除重复数据
        我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢?         重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。 一、对于部分字段重复数据的删除         先来谈谈如何查询重复的数据吧。         下面语句可以查询出那些数据是重复的:   select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1         将上面的>号改为=号就可以查询出没有重复的数据了。         想要删除这些重复的数据,可以使用下面语句进行删除   delete from 表名 a where 字段1,字段2 in     (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)         上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:   CREATE TABLE 临时表 AS   (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)         上面这句话就是建立了临时表,并将查询到的数据插入其中。         下面就可以进行这样的删除操作了:   delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);         这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。        这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。        在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录, 我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。        下面是查询重复数据的一个例子:   select a.rowid,a.* from 表名 a  where a.rowid !=  (   select max(b.rowid) from 表名 b   where a.字段1 = b.字段1 and   a.字段2 = b.字段2  )        下面我就来讲解一下,上面括号中的语句是查询出重复数据中rowid最大的一条记录。        而外面就是查询出除了rowid最大之外的其他重复的数据了。        由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:  delete from 表名 a  where a.rowid !=  (   select max(b.rowid) from 表名 b   where a.字段1 = b.字段1 and   a.字段2 = b.字段2  )        随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。   create table 临时表 as     select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;   delete from 表名 a  where a.rowid !=  (   select b.dataid from 临时表 b   where a.字段1 = b.字段1 and   a.字段2 = b.字段2  );  commit; 二、对于完全重复记录的删除         对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:   select distinct * from 表名   可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:   CREATE TABLE 临时表 AS (select distinct * from 表名);   truncate table 正式表;            --注:原先由于笔误写成了drop table 正式表;,现在已经改正过来   insert into 正式表 (select * from 临时表);   drop table 临时表;
源哥
2018/08/28
2.4K0
如何正确的使用一条SQL删除重复数据
数据库中表存在重复数据,需要清理重复数据,清理后保留其中一条的情况是比较常见的需求,如何通过1条SQL准确的删除数据呢?
俊才
2022/05/31
1.8K0
如何正确的使用一条SQL删除重复数据
MySQL 大批量插入,如何过滤掉重复数据?
加班原因是上线,解决线上数据库存在重复数据的问题,发现了程序的bug,很好解决,有点问题的是,修正线上的重复数据。
民工哥
2021/08/10
1.4K0
如何实现 MySQL 删除重复记录并且只保留一条
blog.csdn.net/n950814abc/article/details/82284838
JAVA葵花宝典
2020/11/04
1.3K0
如何实现 MySQL 删除重复记录并且只保留一条
MySQL 处理重复数据的方式
有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
用户9042463
2021/09/30
2.2K0
MySQL 如何处理重复数据
有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
用户1685462
2021/07/17
2.1K0
插入大批量数据 ,如何过滤掉重复数据?
最近再解决线上数据库存在重复数据的问题,发现了程序的bug,很好解决,有点问题的是,修正线上的重复数据。
Java技术精选
2021/08/12
8980
MySQL 中查找重复数据,删除重复数据
数据库版本 Server version: 5.1.41-community-log MySQL Community Server (GPL)
很酷的站长
2022/11/27
7.7K0
MySQL 中查找重复数据,删除重复数据
SQL如何删除重复数据
SQL如何删除重复数据 在使用数据库时,如何删除重复数据? 如图所示:用户表(user)数据 1、输入查询语句(查询name重复数据) select * from user where name in (select name from user group by name having count(name) > 1) 查询后,可以看到name叫“张三”的有3条数据。 可以使用distinct去重(返回不重复的用户名) select distinct name from user 查询后,
wangmcn
2022/07/26
1.6K0
SQL如何删除重复数据
巧用 CTE 公共表达式删除 MySQL 重复数据
一段时间后,大多数应用程序可能由于bug而出现重复行,这不仅影响用户体验,还增加了存储需求并降低数据库性能。可以通过一个 SQL 查询来完成整个清理过程,从而有效解决这一问题。
贺春旸的技术博客
2024/10/11
1820
【DB笔试面试469】Oracle中如何删除表中重复的记录?
平时工作中可能会遇到这种情况,当试图对表中的某一列或几列创建唯一索引时,系统提示ORA-01452 :不能创建唯一索引,发现重复记录。这个时候只能创建普通索引或者删除重复记录后再创建唯一索引。
AiDBA宝典
2019/09/30
2.8K0
MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据
  最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据库之前是不会进行重复判断的,因此只有在全部数据导入进去以后在执行一条语句进行删除,保证数据唯一性。
追逐时光者
2019/08/28
3.6K0
MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据
【mysql】mysql删除重复记录并且只保留一条
b. ☆第二种方法(与上面查询的第二种方法对应,只是将select改为delete):
全栈程序员站长
2022/09/12
5.5K0
【mysql】mysql删除重复记录并且只保留一条
MySql基础-笔记12 -重复数据处理、SQL注入、导入导出数据
读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。
虫无涯
2023/01/31
1.4K0
mysql删除重复记录只保留一条
查询出所有重复记录 select 字段名,字段名 from 表名 where 重复字段名 in (select 重复字段名  from 表名 group by 重复字段名  having count(1) >= 2) ORDER BY  重复字段名 查询出所有重复记录并且删除多余的只保留一条 delete from 表名 where  重复字段名 in ( SELECT a.重复字段名from( select 重复字段名 from 表名 group by 重复字段名 having count(1
仙士可
2019/12/18
3.2K0
Oracle数据库查询重复数据及删除重复数据方法
工作中,发现Oracle数据库表中有许多重复的数据,而这个时候老板需要统计表中有多少条数据时(不包含重复数据),只想说一句MMP,库中好几十万数据,肿么办,无奈只能自己在网上找语句,最终成功解救,下面是我一个实验,很好理解。 
星哥玩云
2022/08/17
4.8K0
Oracle数据库查询重复数据及删除重复数据方法
如何删除重复数据(二)
上一篇我们介绍了在有主键的表中删除重复数据,今天就介绍如何删除没有主键的表的重复数据。
白日梦想家
2020/07/18
1.3K0
常用SQL语句
ERROR 1025 (HY000): Error on rename of ‘./test/#sql-27c_2308’ to ‘./test/student’ (errno: 150) 更改类型编码类型时 出现此错误一般为有外键约束 解决方法 暂时停止外键检查 set foreign_key_checks=0; 4.6
周小董
2019/03/25
1.8K0
软件测试|MySQL DISTINCT关键字过滤重复数据
在MySQL中,有时候我们需要从表中检索唯一的、不重复的数据。这时,我们可以使用DISTINCT关键字来过滤掉重复的数据行。在本文中,我们将深入探讨MySQL中DISTINCT的用法以及如何在查询中使用它来得到不重复的结果集。
霍格沃兹测试开发Muller老师
2023/11/08
3590
删除表中重复数据「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105915.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
9680
推荐阅读
相关推荐
oracle中如何删除重复数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验