删除表中重复数据的sql

2007年八月21日 由 贝贝爸 Leave a reply »

一张多用户的通讯记录表,主要是手机信息,每个用户可以建立自己的联系人组。
原来数据对数据没有校验,用户可以在一个组里面输入重复手机号码,如果数据量大,会造成数据重复。
所以要做一个唯一性的索引,如下:

create unique index inx_uniq_cellphone_onegroup on addresslist (cellphone, groupid, operatorid);

目的是保证每个用户的每个组里面,不能有同样的cellphone。
但是建立的时候出错,因为里面原来有重复的数据。
清除重复的数据,用如下的sql,如果重复的就删除rowid不等于max(rowid)的那条记录。

delete addresslist
 
where rowid not in (select rowid1
                      
from addresslist a,
                            
(select cellphone,
                                    
groupid,
                                    
operatorid,
                                    
max(rowid) rowid1,
                                    
count(*)
                              
from addresslist
                              
group by cellphone, groupid, operatorid) b
                      
where a.cellphone = b.cellphone
                        
and a.groupid = b.groupid
                        
and a.operatorid = b.operatorid
                        
and a.rowid = b.rowid1)

Popularity: 22%

相关文章

Advertisement

One Response

  1. 花开 说:

    十四让你写的吧?/qiang

Leave a Reply