最近遇到这么一个问题:要求删除表中重复的记录。具体来说:比如有一张用户表,用户姓名不是主键可以重复,存在这种情况,一个用户姓名被录入了好几次,如何删除重复的记录,同时要保留一条该用户录。没有具体说明保留那条记录,只要用户姓名重复的保留一条即可。
示例:
animal 表:
create table animal (
id int ,
name varchar2(100),
sex varchar2(10)
);
添加记录:
insert into animal values (1, 'tom', 'male');
insert into animal values (2, 'tom', 'female');
insert into animal values (3, 'tom', 'ff');
insert into animal values (4, 'lili', 'male');
id为1,2,3的三条记录名字重了,要求只保留一条,删除另外两条。
oralce数据库中,该问题解决方法的具体实现如下:
delete from animal a where rowid<(select max(b.rowid) from animal b where a.name=b.name);
结果:
剩下两条记录。一条name=lili,一条name=tom.
-----------------------------------------------------------------------------
mysql数据库中,该问题解决方法的具体实现:
alter ignore table animal add unique index (name);
结果同上面。
总结:
类似问题oracle参考手册,mysql参考手册中大多有讲解。平时学习时,注意多看权威的参考资料,有助于全面掌握知识,并系统化,规范化。