Oracle如何實現多個欄位去重
阿新 • • 發佈:2019-02-13
我們通常使用distinct關鍵字來去除重複記錄,還有沒有其他辦法呢?通過查詢資料,確認group by也可以,利用rowid也可以實現功能。其中,group by是用來分組統計的,能用distinct的地方就不要用group by。下面我們看一下幾種方法具體如何實現,至於選用哪一種,主要還是看需求,實現功能是最主要的。
首先我們建立測試表hoegh,插入3條記錄。我們可以看到,就前兩個欄位而言,第二條記錄和第三條記錄是重複的。
使用DISTINCT去重
如下:
使用group by去重
gruop by是Oracle中常用的分組函式,我們看一下如何使用group by來實現去重功能。
ROWID是資料的詳細地址,通過rowid,oracle可以快速的定位某行具體的資料的位置。通過下面的語句,可以保留重複記錄中的最新一條記錄(即最後插入的那條記錄)。
首先我們建立測試表hoegh,插入3條記錄。我們可以看到,就前兩個欄位而言,第二條記錄和第三條記錄是重複的。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> create table hoegh(h1 number,h2 number,h3 number
-
Table created
-
SQL> insert into hoegh values(1,1,1);
-
1 row inserted
-
SQL> insert into hoegh values(2,2,2);
-
1 row inserted
-
SQL> insert into hoegh values(2,2,8);
-
1 row inserted
-
SQL> commit;
-
Commit complete
-
SQL> select * from hoegh;
-
H1 H2 H3
-
---------- ---------- ----------
-
1 1 1
-
2 2 2
-
2 2 8
- SQL>
使用DISTINCT去重
如下:
點選(此處)摺疊或開啟
-
SQL>
-
SQL> select distincth1,h2 from hoegh;
-
H1 H2
-
---------- ----------
-
1 1
- 2 2
- SQL>
使用group by去重
gruop by是Oracle中常用的分組函式,我們看一下如何使用group by來實現去重功能。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> select h1,h2 from hoegh group
-
H1 H2
-
---------- ----------
-
1 1
-
2 2
- SQL>
點選(此處)摺疊或開啟
-
SQL>
-
SQL> delete from hoegh
-
2 where h3 not in (select max(h3) from hoegh group by h1,h2);
-
1 row deleted
-
SQL> commit;
-
Commit complete
-
SQL> select * from hoegh;
-
H1 H2 H3
-
---------- ---------- ----------
-
1 1 1
-
2 2 8
- SQL>
ROWID是資料的詳細地址,通過rowid,oracle可以快速的定位某行具體的資料的位置。通過下面的語句,可以保留重複記錄中的最新一條記錄(即最後插入的那條記錄)。
點選(此處)摺疊或開啟
-
SQL>
-
SQL> delete from hoegh
-
2 where rowid not in
-
3 (select max(rowid) from hoegh group by(h1,h2));
-
1 row deleted
-
SQL> commit;
-
Commit complete
-
SQL>
-
SQL> select * from hoegh;
-
H1 H2 H3
-
---------- ---------- ----------
-
1 1 1
-
2 2 8
- SQL>