删除表中重复数据的sql


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

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)

《“删除表中重复数据的sql”》 有 1 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据