mysql 删除重复数据保留一条有效数据

需求:

第一种,数据有主键,目前存在有除了主键不一样,其他数据都一样的数据,比如:

id (pk) =1, name = 刘德华,sex =男

id (pk) =2, name = 刘德华,sex =男

这种情况下,在数据量少的情况下可以直接跑删除sql :

delete from 表aaa  where b.id not in (

   select  min(id) from 表aaa  group by name,sex  (sql不是只有这一种,只要能查出不重复的id就行)

)

但是,当数据量大的情况下 比如上千万上亿,单表可能就跑不动了,此时我们可以另辟新径,

 新建一张一模一样的表(直接copy create语句),然后去insert就行

  insert into 表copy  select * from 表aaa GROUP BY name,sex   

这种在数据量大的情况下速度是比删除快很多的。

第二种,数据没有主键,存在全部字段的内容都一样的数据  比如

 name = 刘德华,sex =男   ,age=18

 name = 刘德华,sex =男  ,age=18

这种我们直接 同理上面的 新建一张一模一样的表 然后

  insert into 表copy SELECT DISTINCT(name ),age,sex FROM 表aaa    就可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用以下 SQL 语句删除重复数据保留一条: ``` DELETE t1 FROM 表名 t1, 表名 t2 WHERE t1.id > t2.id AND t1.字段名 = t2.字段名; ``` 其中,`表名` 为需要删除重复数据的表名,`字段名` 为用于判断重复的字段名,`id` 为表中的主键或唯一标识符。该 SQL 语句会将所有重复数据保留一条删除其余重复数据。 ### 回答2: 要删除重复数据保留一条,可以使用MySQL的DELETE语句和子查询来实现。 首先,可以使用如下的SELECT语句来查询出所有重复数据: SELECT col1, col2, ..., coln, COUNT(*) AS count FROM table_name GROUP BY col1, col2, ..., coln HAVING COUNT(*) > 1; 这个查询用于找到所有有重复数据的列,并通过GROUP BY和HAVING子句筛选出重复数据。 接下来,可以使用DELETE语句和子查询来删除重复数据,只保留一条: DELETE FROM table_name WHERE (col1, col2, ..., coln) NOT IN (SELECT col1, col2, ..., coln FROM table_name GROUP BY col1, col2, ..., coln HAVING COUNT(*) > 1); 这个DELETE语句会删除表中除了第一次出现的重复数据以外的所有重复数据。 注意,在使用这个方法之前,一定要先备份好数据,以免误删数据。 ### 回答3: 要删除MySQL中的重复数据保留一条,可以使用以下的步骤: 1. 首先,我们需要找出重复数据。可以使用GROUP BY和HAVING语句来找到重复数据。例如,假设我们要删除表中的重复email字段,可以使用以下语句: SELECT email, COUNT(*) FROM table_name GROUP BY email HAVING COUNT(*) > 1; 这将返回所有重复的email及其重复的次数。 2. 根据找到的重复数据,我们可以选择保留其中的一条,并删除其他重复数据。可以使用DELETE语句来删除重复数据。例如,假设我们要保留COUNT(*)最大的那条数据,可以使用以下语句: DELETE FROM table_name WHERE email IN (SELECT email FROM table_name GROUP BY email HAVING COUNT(*) > 1) AND id NOT IN (SELECT MAX(id) FROM table_name GROUP BY email HAVING COUNT(*) > 1); 这将删除除了COUNT(*)最大的那条数据以外的其他重复数据。 3. 最后,我们可以再次运行第一步的查询语句来验证是否已成功删除重复数据。如果查询结果为空,说明已成功删除重复数据保留一条。 需要注意的是,执行此操作前请务必备份数据库,以防意外数据损失。另外,根据实际情况,可能需要针对具体的表和字段进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值