典型sql面试点-rowid删除数据
来源:互联网 发布:淘宝客开通 编辑:程序博客网 时间:2024/06/05 15:29
在Oracle数据库中有一表t_foo,表中有一字段id,如何高效地删除表中id字段的重复数据 ?
解答:
因为Oracle提供了两个伪例,一个是rownum,另一个是rowid,他们的应用分别是分页查询和性能调优上。
这里需要使用到rowid,因为它是oracle数据库自动为记录添加唯一的18位编号,不会随着查询而改变。
--思路: --先查看rowidselect t.id,rownum,rowid from t_foo t21AAAM4RAAEAAAAI0AAA12AAAM4RAAEAAAAI1AAA33AAAM4RAAEAAAAI1AAB44AAAM4RAAEAAAAI1AAC55AAAM4RAAEAAAAI1AAE56AAAM4RAAEAAAAI3AAA57AAAM4RAAEAAAAI3AAB48AAAM4RAAEAAAAI3AAC--根据重复字段分组,找出最大的rowid值select t.id,max(rownum),max(rowid) from t_foo t group by t.id; 12AAAM4RAAEAAAAI1AAA21AAAM4RAAEAAAAI0AAA 48AAAM4RAAEAAAAI3AAC57AAAM4RAAEAAAAI3AAB 33AAAM4RAAEAAAAI1AAB --使用子查询关联查询,找出比max(rowid)小的重复值select b.id,rownum,rowid from t_foo b where rowid< (select max(rowid) from t_foo where id=b.id); 4 1 AAAM4RAAEAAAAI1AAC 5 2 AAAM4RAAEAAAAI1AAE 5 3 AAAM4RAAEAAAAI3AAA--直接删除那些重复的值,若数据量较大,建议通过临时表来进行数据操作,也就是先保存不重复数据,再drop/create table,然后insert intodelete from t_foo b where rowid< (select max(rowid) from t_foo where id=b.id);
备注:关于索引,只对查询有用,对insert into,delete,update 的操作反而有影响
- 典型sql面试点-rowid删除数据
- 根据rowid删除重复数据
- sql用rowid删除表中重复的行
- 【SQL】通过rowid查找及删除重复记录
- rowid 删除重复记录!!!
- rowid 删除重复记录
- rowid删除重复记录
- rowid 删除重复记录!!!
- SQL Server 中的rowid
- 【SQL】ROWNUM和ROWID
- 用SQL删除数据
- 关于SQL数据删除
- SQL删除数据
- sql删除重复数据
- sql 删除重复数据
- 用SQL删除数据
- Sql删除重复数据
- SQL删除重复数据
- 如何使用Windows Phone 7打电话
- smarty学习札记
- make menuconfig编译linux内核错误:'make menuconfig' requires the ncurses libraries
- 设置IE9的新网页在新选项卡中打开,而不是新窗口中打开
- System_C_FPGA_TPMS_10_16
- 典型sql面试点-rowid删除数据
- 电脑端口大全
- 如何使Windows Phone震动并播放声音
- ServletContext应用
- 总结网站优化的几个要点
- 练习Toast和Notification
- 文件批量重命名代码
- win7 隐藏任务栏操作中心图标
- 时间管理(Time Management)