标签:sql
如题: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;
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 最小的一行数据。删除其他重复的行。
可能还有方法,这只是我现在找到的方法,如果有什么新方法的话,可以来添加哦。
标签:sql
原文地址:http://blog.csdn.net/u011845742/article/details/45398667