只有一题,题目如下
表 我就建一张简单的
create table pp(
pname varchar2(20)
);
插入字段
insert into pp values(‘aaa’);
insert into pp values(‘bbb’);
insert into pp values(‘ccc’);
insert into pp values(‘aaa’);
insert into pp values(‘bbb’);
insert into pp values(‘ccc’);
insert into pp values(‘aaa’);
insert into pp values(‘bbb’);
需求 : 使用一条语句删除表中重复的记录,
我们需要使用oracle,否则几乎不可能完成
根据rowid来完成需求
1.使用子查询的写法
delete from pp p1 where rowid > (select min(rowid) from pp p2 where p1.name = p2.name);
根据name查询当前name最小的rowid, 然后判断 rowid 是否大于 查询的最小的rowid, 如果大于了,就证明不是最小的rowid, 那么就是可删除的
2.使用普通的写法
delete from pp where rowid not in(select min(rowid) from pp where rowid is not null group by name );
使用分组,聚合函数找到所有最小的rowid, 然后删除所有rowid 不等于最小rowid中的任何一个,
使用rownum不知道能不能完成,我个人感觉不行,,,,,有兴趣的话可以试试