MySql百万级数据去重保留一份,一对多合并处理

本文讲述了如何处理140万条重复数据,通过两种方法进行数据去重和一对多合并,最终降至1万条。第一种方法利用唯一性约束字段排序并删除非最小ID的重复数据,注意SQL编写时的错误与限制。第二种方法则是直接将30万条处理后的数据导入新表,实现1对多处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近帮运维组处理了一份急着上架的数据,大概有140万量,下面我们看一下是怎样处理的吧。

这批数据大部分都是重复的,经过处理的数据大概在30万左右,然后进行一对多合并处理,最后的数据量大概在1万左右。

下面提供了两种方法或思路,第一种思路是网上提供的比较多的一种,就是通过唯一性约束的字段进行排序,然后查询处理出来的这些数据都是重复数据的第一条,所以id必然是这些重复数据最小的,然后删除调这些重复数据中id不是最小的就可以得出筛选结果了。

当然数据上面设计到商业保密,这里我就自己创建一个demo了。

sql如下:

// 将重复数据的id最小的一条筛选出来,第二步进行删除
select id FROM haha
where CONCAT(namea,sex,num) in (
   SELECT CONCAT(namea,sex,num) FROM haha 
		GROUP BY CONCAT(namea,sex,num) 
		HAVING count(id> 1)
) 

//进行删除操作,删除冗余数据
DELETE FROM haha where id in (
select id FROM haha
where CONCAT(namea,sex,num) in (
   SELECT CONCAT(namea,sex,num) FROM haha 
		GROUP BY CONCAT(namea,sex,num) 
		HAVING count(id> 1)
) 
and id not in (
SELECT MIN(id) as id  FROM haha 
GROUP BY CONCAT(namea,sex,num) 
HAVING COUNT(id > 1)
))

当然写sql的过程中也遇到一些错误,

1、select * from  haha where id in (select id ,namea  from haha )  select in 的右边只能是id ,所以namea

MySQL中,UNION和UNION ALL关键字都用于合并两个或个SELECT语句的结果集,但它们在处理复行和排序方面有所不同。以下是具体的解释和示例。 参考资源链接:[MySQL union与union all的区别详解:与排序](https://wenku.youkuaiyun.com/doc/64534d9aea0840391e77960c?spm=1055.2569.3001.10343) 首先,来看看UNION。它在合并结果集时会自动复的行。这意味着如果你从两个表中查询相同的数据,UNION只会将每唯一的记录加入到最终结果集中。默认情况下,使用UNION进行查询还会对结果集进行排序。例如,有两个表`t_demo`和`t_demo_copy`,它们都包含相同的列(id, name, age, num),但可能包含不同的数据复的数据。 以下是使用UNION合并这两个表查询,并复行的示例: ```sql SELECT id, name, age, num FROM t_demo UNION SELECT id, name, age, num FROM t_demo_copy; ``` 在这个例子中,假设`id`列是主键,因此每个行的组合都是唯一的。执行上述查询后,你会得到一个包含所有不复行的列表,而且这个列表默认是按照列的自然顺序(即SELECT语句中列的顺序)排序的。 而UNION ALL则不同,它不会也不会排序。如果两个表中有相同的数据行,它们都会在最终的结果集中显示。这在需要获取所有数据(包括复行)进行分析或统计时非常有用。使用UNION ALL的示例如下: ```sql SELECT id, name, age, num FROM t_demo UNION ALL SELECT id, name, age, num FROM t_demo_copy; ``` 在这个例子中,无论数据是否复,都会原样展示。这样可以提高查询效率,因为数据库不需要执行额外的操作。然而,结果集可能不会排序,除非你明确指定了ORDER BY子句。 综上所述,UNION和UNION ALL的使用取决于你的具体需求。如果需要结果集不复且自动排序,使用UNION;如果需要包含所有数据并提高查询效率,使用UNION ALL。更深入地了解这些操作的细微差别,你可以参考这份资料:《MySQL union与union all的区别详解:与排序》。它详细解释了这两种操作的区别,并提供了更实战示例,帮助你更好地掌握它们的使用方法。 参考资源链接:[MySQL union与union all的区别详解:与排序](https://wenku.youkuaiyun.com/doc/64534d9aea0840391e77960c?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值