oracle資料庫去重
Ⅰ Oracle資料庫重復數據刪除的幾種方法
重復的數據可能有這樣兩種情況,第一種時表中只有某些欄位一樣,第二種是兩行記錄完全一樣。Oracle資料庫重復數據刪除技術有如下優勢:更大的備份容量、數據能得到持續驗證、有更高的數據恢復服務水平、方便實現備份數據的容災。
一、刪除部分欄位重復數據先來談談如何查詢重復的數據吧。
下面語句可以查詢出那些數據是重復的:
select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1
將上面的>號改為=號就可以查詢出沒有重復的數據了。
想要刪除這些重復的數據,可以使用下面語句進行刪除
delete
from
表名
a
where
欄位1,欄位2
in
(select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1)
上面的語句非常簡單,就是將查詢到的數據刪除掉。不過這種刪除執行的效率非常低,對於大數據量來說,可能會將資料庫弔死。所以我建議先將查詢到的重復的數據插入到一個臨時表中,然後對進行刪除,這樣,執行刪除的時候就不用再進行一次查詢了。如下:
CREATE
TABLE
臨時表
AS
(select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1)
上面這句話就是建立了臨時表,並將查詢到的數據插入其中。
下面就可以進行這樣的刪除操作了:
delete
from
表名
a
where
欄位1,欄位2
in
(select
欄位1,欄位2
from
臨時表);
這種先建臨時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多。
這個時候,大家可能會跳出來說,什麼?你叫我
Ⅱ 鍦╫racle鏁版嵁搴撲腑錛屾庢牱鏌ヨ㈠嚭鍙鏈変竴涓瀛楁電殑琛ㄧ殑閲嶅嶆暟鎹錛
鏂規硶涓錛氬彲浠ラ氳繃group by 榪涜屽垎緇勩俓x0dx0asql錛歴elect username,count(username) from tablename grop by username;x0dx0a瑙i噴錛氫互涓妔ql灝辨槸閫氳繃鍒嗙粍鍑芥暟璇誨彇鍑簍ablename琛ㄤ腑username鐨勫煎拰姣忎釜涓嶅悓鍊肩殑緇熻′釜鏁般俓x0dx0a鏂規硶浜岋細鍙浠ラ氳繃distinct鍑芥暟 榪涜屽幓閲嶆煡璇銆俓x0dx0asql錛歴elect distinct username from tablenamex0dx0a瑙i噴錛氭湰sql灝辨槸鏌ヨ㈠嚭鎵鏈夌殑tablename琛ㄤ腑鐨剈sername鍊(涓嶉噸澶)銆
Ⅲ oracle某個欄位有重復數據,如何刪除多餘數據只保留1條
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷。