Chinaunix

标题: mysql删除重复的记录 [打印本页]

作者: apple13212    时间: 2009-01-04 16:41
标题: mysql删除重复的记录
重复记录如下:
         请问该如何删除。

1234.png (12.66 KB, 下载次数: 53)

1234.png

作者: ttplay    时间: 2009-01-07 00:46
新建一个临时表  
  create   table   tmp   as   select   *   from   youtable   group   by   name  
  删除原来的表  
  drop   table   youtable  
  重命名表  
  alter   table   tmp   rename   youtable
作者: DQP    时间: 2009-01-07 09:03
原帖由 ttplay 于 2009-1-7 00:46 发表
新建一个临时表  
  create   table   tmp   as   select   *   from   youtable   group   by   name  
  删除原来的表  
  drop   table   youtable  
  重命名表  
  alter   table   tmp   rename   y ...


这个错了
如果name相同而其他不同时 那么其它列的值是不一定的。
作者: andrefun    时间: 2009-01-07 11:09
insert into t1 select * from t group by col_1, col_2, col_3...
然后再rename t1~
不过效率怎样待讨论。可能有更好的办法,欢迎交流~

刚和别人讨论,这个应该更好:
alter ignore table t1 add unique key1 (col_1, col_2, col_3 ... );

[ 本帖最后由 andrefun 于 2009-1-7 11:27 编辑 ]
作者: 日月如尧    时间: 2009-01-07 11:17
原帖由 DQP 于 2009-1-7 09:03 发表


这个错了
如果name相同而其他不同时 那么其它列的值是不一定的。



其他列不同时,那就可以用值不同的列直接区分出两条记录了,也就不用二楼的这个方法了。
针对LZ的问题,我同意2#的方法


作者: DQP    时间: 2009-01-07 11:53
标题: 回复 #5 日月如尧 的帖子
我是说如果用#2的方法可能会出现这样的情况

  1. table: t
  2. name col2 col3 col4
  3. a        1    2     3
  4. a        1    2     3
  5. b        1    2     5
  6. b        1    4     3

  7. 目的是去掉a        1    2     3
  8. 而用了#2的方法后的结果是
  9. a        1    2     3
  10. b        1    4     3
  11. 而且有可能更糟糕 出现 b        1    2    3
  12. 如果要用group by的话那就应该把所有的列都加上
  13. 实际上应该用distinct
  14. 也许group by可以组合索引 那就是优化的事了 我不太懂
复制代码

作者: 日月如尧    时间: 2009-01-07 14:41
4# 的方法LZ可以试试
6# 我知道你什么意思了
作者: yueliangdao0608    时间: 2009-01-08 11:35
方法很多。LZ参考下LS各位的办法,或者搜索一下老帖子吧。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2