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 临时表);

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