zoukankan      html  css  js  c++  java
  • Oracle查询表里的重复数据方法

    select id from group by id having count(*) > 1

      按照id分组并计数,某个id号那一组的数量超过1条则认为重复。

    如何查询重复的数据

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

    PS:将上面的>号改为=号就可以查询出没有重复的数据了。

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

    Oracle删除重复数据的SQL(留下一条记录):

    oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。

    使用ROWID查询重复数据:

    select a.rowid,a.* from 表名 a
    where a.rowid !=
    (select max(b.rowid) from 表名 b
    where a.字段1 = b.字段1 and
    a.字段2 = b.字段2 )

    括号中的SQL查询出rowid最大的记录,而外面就是查询出除了rowid最大之外的其他重复的数据了。

    由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:

    删除重复数据(留下最大ROWID的一条)

    delete from 表名 a where a.rowid !=
    (select max(b.rowid) from 表名 b
    where a.字段1 = b.字段1 and
    a.字段2 = b.字段2 )

    删除重复数据(留下最小ROWID的一条)

    delete tab t where t.rowid > (
    select min(t2.rowid) from tab t2 where t.col2 = t2.col2 and t.col8 = t2.col8
    )

  • 相关阅读:
    Android--从路径中提取文件名
    Android--全局变量 很好很强大
    Android数据库升级实例
    eclipse中maven项目部署到tomcat [转]
    【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目
    maven下载和安装
    Maven 在eclipse中如何配置
    怎么查看eclipse是否支持maven
    证书
    Tomcat7中开启gzip压缩功能的配置方法
  • 原文地址:https://www.cnblogs.com/2881064178dinfeng/p/7019353.html
Copyright © 2011-2022 走看看