查詢重複的數據
(字段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 臨時表);