好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mysql 删除重复数据

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 最小的一行数据。删除其他重复的行。

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

$(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘ ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i ‘).text(i)); }; $numbering.fadeIn(1700); }); });

mysql 删除重复数据

标签:sql

查看更多关于mysql 删除重复数据的详细内容...

  阅读:20次