<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    The important thing in life is to have a great aim , and the determination

    常用鏈接

    統計

    IT技術鏈接

    保險相關

    友情鏈接

    基金知識

    生活相關

    最新評論

    如何查找、刪除表中重復的記錄

    軟件環境:

    1Windows NT4.0+ORACLE 8.0.4

    2ORACLE安裝路徑為:C:"ORANT

    問題提出:

    1、當我們想要為一個表創建唯一索引時,如果該表有重復的記錄,則無法創建成功。

    方法原理:

    1Oracle中,每一條記錄都有一個rowidrowid在整個數據庫中是唯一的,

      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

     

    come from :: http://dev.csdn.net/article/59/59333.shtm

    -測試數據

    /*-----------------------------

    select * from tt

    -----------------------------*/

    id          pid        

    ----------- -----------

    1           1

    1           1

    2           2

    3           3

    3           3

    3           3

    (所影響的行數為 6 行)

    首先,如何查詢table中有重復記錄

    select *,count(1) as rownum

    from tt

    group by id, pid

    having count(1) > 1

    id          pid         rownum     

    ----------- ----------- -----------

    1           1           2

    3           3           3

     

    (所影響的行數為 2 行)

    方法一:使用distinct和臨時表

    if object_id('tempdb..#tmp') is not null

    drop table #tmp

    select distinct * into #tmp from tt

    truncate table tt

    insert into tt select * from #tmp

    方法二:添加標識列

    alter table tt add NewID int identity(1,1)

    go 

    delete from tt where exists(select 1 from tt a where a.newid>tt.newid and tt.id=a.id and tt.pid=a.pid)

    go

    alter table tt drop column NewID

    go

    --測試結果

    /*-----------------------------

    select * from tt

    -----------------------------*/

    id          pid        

    ----------- -----------

    1           1

    2           2

    3           3

    (所影響的行數為 3 行)

    *---*-- * 8 8 * * * * 8* * * * 8 8 *

    USE CEO

    CREATE TABLE TT

    (

    TTNO CHAR(4),

    TTNAME VARCHAR(10)

    )

    INSERT INTO TT (TTNO,TTNAME) VALUES ('1425','WHERE')

    INSERT INTO TT (TTNO,TTNAME) VALUES ('1425','WHERE')

    INSERT INTO TT (TTNO,TTNAME) VALUES ('1424','WHEREIS')

    INSERT INTO TT (TTNO,TTNAME) VALUES ('1435','WHEREIS')

    INSERT INTO TT (TTNO,TTNAME) VALUES ('1435','WHEREIS')

    方法二:添加標識列(最有效方法)

    alter table tt add newid2 int identity(1,1)

    go

    delete from tt where exists( select 1 from tt   a where a.newid2>tt.newid2 and tt.ttno=a.ttno and tt.ttname=a.ttname)

    alter table tt drop column newid2

    go

    select * from tt

    posted on 2008-01-22 01:57 鴻雁 閱讀(293) 評論(0)  編輯  收藏 所屬分類: IT技術相關

    主站蜘蛛池模板: 一区二区三区在线免费观看视频 | 亚洲国产精品毛片av不卡在线 | 亚洲高清视频一视频二视频三| 亚洲天堂电影在线观看| 最近最好最新2019中文字幕免费| 日本红怡院亚洲红怡院最新| 三年片免费观看大全国语| 亚洲性猛交XXXX| 免费91麻豆精品国产自产在线观看| 亚洲va久久久噜噜噜久久天堂| 手机在线毛片免费播放| 亚洲AV无码乱码麻豆精品国产| 国产曰批免费视频播放免费s| 亚洲av无码不卡久久| 免费人成视频在线| 看Aⅴ免费毛片手机播放| 免费亚洲视频在线观看| 和老外3p爽粗大免费视频| 亚洲国产第一页www| 91免费国产在线观看| AV激情亚洲男人的天堂国语| www.亚洲精品.com| 美女视频黄a视频全免费网站色窝| 91情国产l精品国产亚洲区| 成人免费在线观看网站| a毛片成人免费全部播放| 亚洲AV电影院在线观看| 成全视频在线观看免费高清动漫视频下载 | 精品一区二区三区免费观看 | 丰满妇女做a级毛片免费观看 | 天堂在线免费观看中文版| 羞羞的视频在线免费观看| 亚洲精品无码不卡在线播HE| 亚洲精品免费在线视频| 国产成人va亚洲电影| 亚洲AV无码久久精品成人 | 国产成人免费高清激情视频| 日韩精品免费一线在线观看| 亚洲最大福利视频网站| 国产男女猛烈无遮挡免费视频网站| 国产精品青草视频免费播放|