查询重复的数据
(字段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 临时表);