<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技術鏈接

    保險相關

    友情鏈接

    基金知識

    生活相關

    最新評論

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

    軟件環(huán)境:

    1Windows NT4.0+ORACLE 8.0.4

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

    問題提出:

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

    方法原理:

    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 鴻雁 閱讀(297) 評論(0)  編輯  收藏 所屬分類: IT技術相關

    主站蜘蛛池模板: 免费黄网站在线看| 亚洲Av高清一区二区三区| 大桥未久亚洲无av码在线| 国产va免费精品观看精品| 亚洲黄色在线视频| 亚洲大片免费观看| 亚洲三级中文字幕| 国产精品成人免费视频网站京东| 亚洲国产精品日韩在线观看| 亚洲毛片在线免费观看| 亚洲日日做天天做日日谢| 国内自产少妇自拍区免费| 偷自拍亚洲视频在线观看99| 亚洲av区一区二区三| 国产免费牲交视频免费播放| 美女视频黄a视频全免费网站色| 日韩免费在线观看| 久久久综合亚洲色一区二区三区| 国产日韩AV免费无码一区二区| 精品久久香蕉国产线看观看亚洲| 亚洲精品日韩专区silk| 免费H网站在线观看的| 亚洲精品无码少妇30P| 亚洲美女在线国产| 久久aⅴ免费观看| 中文字幕乱码亚洲无线三区 | 免费黄色电影在线观看| 亚洲理论精品午夜电影| 永久免费av无码网站大全| 日韩毛片一区视频免费| 亚洲国产国产综合一区首页| 我的小后妈韩剧在线看免费高清版 | 51视频精品全部免费最新| 亚洲综合偷自成人网第页色| 四虎免费永久在线播放| 国产免费一区二区三区在线观看 | 亚洲电影一区二区三区| 久久电影网午夜鲁丝片免费| 一级视频免费观看| 亚洲国产精品久久网午夜 | 国产小视频免费观看|