如何查找、刪除表中重復的記錄
問題提出:
1、當我們想要為一個表創建唯一索引時,如果該表有重復的記錄,則無法創建成功。
方法原理:
1、中,每一條記錄都有一個rowid刪除表中所有重復數據刪除表中所有重復數據,rowid在整個數據庫中是唯一的,
rowid確定了每條記錄是在中的哪一個數據文件、塊、行上。
2、在重復的記錄中,可能所有列的內容都相同,但rowid不會相同,所以只要確定出重復記錄中
那些具有最大rowid的就可以了,其余全部刪除。
3、以下語句用到了3項技巧:rowid、子查詢、別名。
實現方法:
SQL> table a (
2 bm char(4),--編碼
3 mc (20)--名稱
4 )
5 /
表已建立.
SQL> into a ('1111','1111');
SQL> into a ('1112','1111');
SQL> into a ('1113','1111');
SQL> into a ('1114','1111');
SQL> into a * from a;
插入4個記錄.
SQL> ;
完全提交.
SQL> rowid,bm,mc from a;
MC
------------------ ---- -------
.0000.0
.0001.0
.0002.0
.0003.0
.0004.0
.0005.0
.0006.0
.0007.0
查詢到8記錄.
查出重復記錄
SQL> rowid,bm,mc from a where a.rowid!=( max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
MC
------------------ ---- --------------------
.0000.0
.0001.0
.0002.0
.0003.0
刪除重復記錄
SQL> from a a where a.rowid!=( max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
刪除4個記錄.
SQL> rowid,bm,mc from a;
MC
------------------ ---- --------------------
.0004.0
.0005.0
.0006.0
.0007.0