oracle中怎麼查一個表中的一個字段的重複數據?

查詢重複的數據

(字段1 和 字段2 同時重複,且不排除null,即字段1 和 字段2同時爲null,count(*)統計爲一條記錄)

select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1

PS:將上面的>號改爲=號就可以查詢出沒有重複的數據了。

 

上面這種查詢方法會把 字段1和字段2 爲null 的記錄也計算進來,

排除 null 查詢 字段1 有多少條重複記錄:

select 字段1,count(字段1) from 表名 group by 字段1 having count(字段1) > 1

或者

select 字段1 from 表名 group by 字段1 having count(字段1) > 1

簡單講就是要去除null,就把字段放在 count() 裏面,不要去除null,就把字段放在 count() 外面

 

Oracle刪除重複數據的SQL(刪除所有字段):

刪除重複數據的基本結構寫法:

delete from 表名 a where 字段1,字段2 in(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

上面的SQL注意:語句非常簡單,就是將查詢到的數據刪除掉。不過這種刪除執行的效率非常低,對於大數據量來說,可能會將數據庫吊死。

建議先將查詢到的重複的數據插入到一個臨時表中,然後對進行刪除,這樣,執行刪除的時候就不用再進行一次查詢了。

如下:

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 臨時表);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章