最近因为生产上的代码问题,导致数据库表中的数据存在多条一样的数据,代码修复后需要对这些脏数据进行删除。如下表A(三条重复数据):
ID | NAME | AGE | MOBILE |
1 | 张三 | 28 | 130021102xx |
2 | 张三 | 28 | 130021102xx |
3 | 张三 | 28 | 130021102xx |
4 | 李四 | 19 | 159000011xx |
5 | 李四 | 19 | 159000011xx |
1、通过SQL语句查询出重复数据:
SELECT NAME FROM A GROUP BY NAME HAVING COUNT(NAME)>1;
2、删除掉重复行数据,保留一条:
DELETE FROM A WHERE NAME IN (SELECT NAME FROM (SELECT NAME FROM A GROUP BY NAME HAVING COUNT(*)>1) aa) AND ID NOT IN (SELECT ID FROM (SELECT MIN(ID) ID FROM A GROUP BY NAME HAVING COUNT(*)>1) bb);
注意:2中的sql表别名是必须的,不用别名的话会报错。原因没有去细究。