delete from table1 a where a.rowid = (select max(rowid) from table1 b where a.mc = b.mc and a.dh = b.dh and a.dz = b.dz);
解决方案 »
- 安装Oracle失败,提示需要注册wfnvg.ocx控件!如何解决
- 求中间文件的排序法
- 关于zoned
- 关于用dts工具导入导出的问题(access导到oracle)
- 在oracle8.1.7中插入图片的详细办法!
- 【牛人看一下吧】☆★☆★☆ 菜问题:为什么tablespace里面凭空出来好几十个表???☆★☆★☆
- 如何知道一个表里那些字段是关键字
- 排序 合併連結問題
- pl/sql 远程连接的问题
- 求助:ODI同步数据问题错误ORA-00980同义词转换不再有效
- oracle8.16安装完成以后如何配置,分不够可以再加,急!
- sqlplus work sheet登陆成功了,显示connected,但是sql语句执行不显示结果是怎么回事?
我只有一个表阿
怎么会有table a ,table b得
就是删除同一个表中相同记录总ROWID(伪列)最大的记录,也可以是min(rowid)
(slect max(rowid) from a group by mc,dh,dz)
软件环境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:C:\ORANT问题提出:
1、当我们想要为一个表创建唯一索引时,如果该表有重复的记录,则无法创建成功。
方法原理:
1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,
rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中
那些具有最大rowid的就可以了,其余全部删除。3、以下语句用到了3项技巧:rowid、子查询、别名。实现方法:
SQL> create table a (
2 bm char(4), --编码
3 mc varchar2(20) --名称
4 )
5 /表已建立.SQL> insert into a values('1111','1111');
SQL> insert into a values('1112','1111');
SQL> insert into a values('1113','1111');
SQL> insert into a values('1114','1111');SQL> insert into a select * from a;插入4个记录.SQL> commit;完全提交.SQL> select rowid,bm,mc from a;ROWID BM MC
------------------ ---- -------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111查询到8记录.
查出重复记录
SQL> select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);ROWID BM MC
------------------ ---- --------------------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111删除重复记录
SQL> delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);删除4个记录.SQL> select rowid,bm,mc from a;ROWID BM MC
------------------ ---- --------------------
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111