问题描述:有这样一张表:主键是自增的id,其中数据的唯一性由多列属性综合确定,在使用这张表的时候,由于对新记录的判断出现问题,导致表中的数据出现重复,现在需要将这些重复的数据检索出来并清除。表结构:
Filed |
Type |
Null |
Key |
Default |
Extra |
id |
int(11) |
NO |
PRI |
NULL |
auto_increment |
user |
varchar(32) |
NO |
|
NULL |
|
imei |
varchar(16) |
NO |
|
NULL |
|
isBinded |
tinyint(1) |
NO |
|
1 |
|
appId |
varchar(64) |
NO |
|
xxxxxxxxxxxxxx |
|
role |
varchar(16) |
NO |
|
admin |
|
createdAt |
datetime |
NO |
|
CURRENT_TIMESTAMP |
|
updatedAt |
datetime |
NO |
|
|
|
解决方案:主要使用的方法是MySQL的聚合部分的知识,查询能唯一确定一条数据的几列属性,对其中的一列使用count函数,统计出现的次数,使用group by 对这几列的属性进行分组,这样就能得到每一条数据重复的次数,最后使用having,只需要检索重复次数大于1的数据。最终的到的数据就是在表中有重复的数据项,
SQL:
select user,imei,appId,count(user) from xc_users_imeis group by user,imei,appId having count(user)>1;