mysql 多个字段有重复数据, 我需要进行去重处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 多个字段有重复数据, 我需要进行去重处理相关的知识,希望对你有一定的参考价值。

例: 表: tb 里面 有3个字段 id name type
值: 小明 34
小明 46
小明 34
小明 46
小张 46
小张 24
上面可以看出 小张 属于 46, 和24 2个类别里面 而小明, 有重复 46 和 34
sql 应该如何写 查询语句???

过滤重复数据

有些 mysql 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。

如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

你也可以使用 GROUP BY 来读取数据表中不重复的数据:

资料来源:树懒学堂

参考技术A SELECT name,type FROM tb GROUP BY name,type HAVING COUNT(*)>1;

参考技术B 分组显示:SELECT * FROM tb GROUP BY name
去除重复数据可以使用DISTINCT
SELECT DISTINCT * FROM tb GROUP BY name追问

您 好像没有看明白我的问题, 只有在 name 和 type 都重复的情况下 才是重复数据
单个重复 不是重复数据

追答

第二个查询语句没有解决你的问题吗?去除重复的行。

参考技术C select * from tb group by name,type;追问

我已经找到答案了。 。 其实感觉也很简单。。 select DISTINCT name,type from tb 这样可以查出去重后的 数据 把 去重的 添加到新的表里面 (表结构相同) 就ok了 然后 替换表明

mysql对表中数据根据某一字段去重

要删除重复的记录,就要先查出重复的记录,这个很容易做到

select * from 表名 group by 根据哪一个字段(简称字段) having count(字段) > 1

注意:这是查出所有重复记录的第一条记录,需要保留,因此需要添加查询条件,查出所有的重复记录

select id,expect from cqssc where expect in (select expect from cqssc group by expect having count(expect)>1) 

and id not in(select min(id) from cqssc group by expect having count(expect)>1)

技术图片

 

然后

delete from cqssc where id in (select id from (select id from cqssc where expect in 

(select expect from cqssc group by expect having count(expect)>1) and id not in

(select min(id) from cqssc group by expect having count(expect)>1)) as tmpresult)

技术图片

删除成功,最后再查询一下看是否还有重复记录

技术图片

 

以上是关于mysql 多个字段有重复数据, 我需要进行去重处理的主要内容,如果未能解决你的问题,请参考以下文章

SQL多个字段如何去重

SQL多个字段如何去重

mysql,sqlserver数据库去重

mysql对表中数据根据某一字段去重

mysql删除重复的数据(仅一个字段),sql怎么写

mysql 对某几个字段去重