您的位置:首页 > 其它

如何查找、删除表中重复的记录

2008-04-26 19:43 381 查看
如何查找删除表中重复记录
环境:1、WindowsNT4.0+ORACLE8.0.4
2、ORACLE安装路径为:C:/ORANT
问题提出:1、当我们想要为一个表创建唯一索引时,如果该表有重复的记录,则无法创建成功。方法原理:1、中,每一条记录都有一个rowid,rowid在整个中是唯一的,
 rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。

2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录
 那些具有最大rowid的就可以了,其余全部删除。

3、以下语句用到了3项技巧:rowid、子查询、别名。
实现方法:
SQL>createtablea(2bmchar(4),--编码3mcvarchar2(20)--名称4)5/表已建立.SQL>insertintoavalues('1111','1111');SQL>insertintoavalues('1112','1111');SQL>insertintoavalues('1113','1111');SQL>insertintoavalues('1114','1111');SQL>insertintoaselect*froma;插入4个记录.SQL>commit;完全提交.SQL>selectrowid,bm,mcfroma;ROWIDBMMC-----------------------------000000D5.0000.000211111111000000D5.0001.000211121111000000D5.0002.000211131111000000D5.0003.000211141111000000D5.0004.000211111111000000D5.0005.000211121111000000D5.0006.000211131111000000D5.0007.000211141111查询到8记录.查出重复记录SQL>selectrowid,bm,mcfromawherea.rowid!=(selectmax(rowid)fromabwherea.bm=b.bmanda.mc=b.mc);ROWIDBMMC------------------------------------------000000D5.0000.000211111111000000D5.0001.000211121111000000D5.0002.000211131111000000D5.0003.000211141111删除重复记录SQL>deletefromaawherea.rowid!=(selectmax(rowid)fromabwherea.bm=b.bmanda.mc=b.mc);删除4个记录.SQL>selectrowid,bm,mcfroma;ROWIDBMMC------------------------------------------000000D5.0004.000211111111000000D5.0005.000211121111000000D5.0006.000211131111000000D5.0007.000211141111
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: