mysql 删除重复数据

如题:mysql 数据库删除重复数据

因为是mysql 所以其他数据库的命令在mysql 中是不能使用的。不要想当然的使用sql 脚本

delete from table1
where field1 in (select field1 from table1 group by field1 having count(field1) > 1) 
and rowid not in (select min(rowid) from table1 group by field1 having count(field1)>1) 

这是 oracle 数据库的命令。mysql 用会报错。

you can’t specify target table ‘table1’ for update in from clause 错误。

因为 mysql 里 没有 rowid 而且 mysql 中规定 不能在同一个表进行 选择 和 更新,删除等操作。

所以问题来了,怎么来进行删除重复的数据呢?

现在重复有两种情况:

1、整体的重复:比如没有主键的话,可能会出现,行与行是完全一样的。
这种的话可以借助辅助临时表来实现。
就可以使用 sql 语句:

 CREATE TABLE temp SELECT DISTINCT * FROM table1 ;

然后删除原表 在进行手动修改表名……
也可直接使用 sql脚本:

CREATE TABLE temp SELECT DISTINCT * FROM table1 ;
DELETE FROM table1 ;
INSERT INTO table1  SELECT * FROM temp;
DROP TABLE temp;
2、只是几个关键字段的值是重复的,可能是插入或者更新的时候,操作重复了造成的。
前面讲过了 mysql 不能同时对一张表进行插入 和 更新等操作,所以我们要换条路。
我的方法是 使用临时表来进行间接操作。
    CREATE TABLE tmp AS SELECT MIN(ID) AS col FROM test GROUP BY RID;
    DELETE FROM test WHERE ID NOT IN (SELECT col FROM tmp); 
    DROP TABLE tmp;

PS:这里 RID 是重复的字段(之一)。保留的是 ID 最小的一行数据。删除其他重复的行。

可能还有方法,这只是我现在找到的方法,如果有什么新方法的话,可以来添加哦。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值