读书人

一路面试遇到的数据库题

发布时间: 2012-10-27 10:42:26 作者: rapoo

一道面试遇到的数据库题
table test

id name pass
1 aaa 111
2 bbb 222
3 ccc 333

insert into test(name,pass) select name,pass from test

table test

id name pass
1 aaa 111
2 bbb 222
3 ccc 333
4 aaa 111
5 bbb 222
6 ccc 333

去掉重复项

delete from test where id not in(select id from test group by name,pass);

delete from test where id not in (select * from (select * from test group by name,pass) a);

delete from test wehre not exists (select * from test group by name,pass);

三句语句只有第二句在mysql 中调试成功

其他的两条逻辑虽然清楚 但是还要在oracle 中测一下

我通过这个语句得到的提示是

select * from test group by name,pass 这句就可以得到不需要删除的语句

或者说除了这个语句查出来的其他的都是多余的.

测试得到 明显在ORACLE里这种方式行不通

有如下方法在ORACLE里可以实现

delete from test where id not in
(select min(id) from test group by name,pass)

用min(); 谢谢

读书人网 >其他数据库

热点推荐