关于 去掉重复的面试题 涉及rowid 和id 的性能比较 外表字段和子查询字段的连接

来源:互联网 发布:惠州网络问政综合平台 编辑:程序博客网 时间:2024/06/05 03:55

**************************面试考题*************************************
13:25 2008-10-12下午==============================
例一:

要求;对于重复的记录只留一条 任意一条都可以。
 create table winfo(
id number (3) primary key ,
name varchar2(10),
age  number(3)
);
insert into winfo( 1,'zhangshan',22);
insert into winfo( 2,'zhangshan',22);
insert into winfo( 3,'liu',22);
insert into winfo( 4,'liu',21);
insert into winfo( 5,'wangwu',22);
select rowid from winfo
*********************用一条语句删除重复记录**********************
改进前:delete from winfo a where id>(
                                                     select min(id) from winfo b where a.name=b.name)

原理:又涉及到了 外表字段和子查询字段的连接

先要执行外表where  那就先执行 子查询 有外表的每条记录的id与字表进行连接查询 找到姓名相同的 然后 在删除id>相同姓名的记录中id较小的那个记录
改进后:delete from winfo a where rowid>(
 slect min(rowid) from winfo b where a.name=b.name)
*************************************************************