注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

lazydba

hello

 
 
 

日志

 
 

如何删除重复数据  

2011-03-27 16:40:08|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
假设有下面这个表,seller_id+buyer_id是需要唯一的,

create table tab(id int, seller_id int, buyer_id int, info varchar(100), ts date, primary key(id));

由于没有加上唯一约束,某些seller_id+buyer_id出现了重复数据,如何找出并清理重复数据?

首先可以按seller_id+buyer_id分组,找出记录数大于1的seller_id+buyer_id组合:
select seller_id, buyer_id, count(*)
from tab
group by seller_id, buyer_id
having(count(*)>1);

然后查出这些seller_id+buyer_id组合下的所有记录
select a.* from tab a, (select seller_id, buyer_id
     from tab
     group by seller_id, buyer_id
     having(count(*)>1) b
where a.seller_id = b.seller_id
and a.buyer_id = b.buyer_id;

如果检查后发现seller_id+buyer_id只需要保留一条记录,如保留id最大的记录,
delete from tab where id in (
    select a.id
    from tab a, (select seller_id, buyer_id, max(id) max_id
         from tab
         group by seller_id, buyer_id
         having(count(*)>1) b
  where a.seller_id = b.seller_id
  and a.buyer_id = b.buyer_id
  and a.id < b.max_id
) ;

删除掉重复记录后,需要加上唯一索引:

alter table tab add unique key uk_tab_sid_bid(seller_id, buyer_id);

__END__
  评论这张
 
阅读(145)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017