• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >oracle > ORACLE查询删除重复记录三种方法

ORACLE查询删除重复记录三种方法

作者:秦风 字体:[增加 减小] 来源:互联网 时间:2017-05-11

秦风通过本文主要向大家介绍了oracle11g安装方法,oracle使用方法,oracle sql优化方法,oracle数据库使用方法,oracle 方法等相关知识,希望本文的分享对您有所帮助

比如现在有一人员表 (表名:peosons)
若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来

from persons  p1,persons  p2  
where p1.id<>p2.id  
and  p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address</div>

可以实现上述效果.

几个删除重复记录的SQL语句

1.用rowid方法

2.用group by方法

3.用distinct方法

1。用rowid方法

据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:

查数据:

from table1 b where a.name1=b.name1 and a.name2=b.name2......)</div>

删数据:

from table1 b where a.name1=b.name1 and a.name2=b.name2......)</div>

2.group by方法

查数据:

group by num
having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次 </div>

删数据:

group by num
having count(num) >1</div>

这样的话就把所有重复的都删除了。

3.用distinct方法 -对于小的表比较有用

truncate table table1;
insert into table1 select * from table_new;</div>

查询及删除重复记录的方法大全

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)</div>

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
where peopleId in (select peopleId from people group by peopleId  
having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)</div>

3、查找表中多余的重复记录(多个字段)
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)</div>

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)</div>

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)</div>

(二)

比方说在A表中存在一个字段“name”,而且不同记录之间的“name”值有可能会相同,现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;

如果还查性别也相同大则如下:

(三)

方法一

declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0</div>

方法二

"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,
比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #T

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ORACLE查询删除重复记录三种方法
  • oracle列合并的实现方法
  • oracle 彻底删除方法

相关文章

  • 2017-05-11oracle误删数据表还原的二种方法(oracle还原)
  • 2017-05-11oracle定时备份压缩的实现步骤
  • 2017-05-11数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
  • 2017-05-11在Tomcat服务器下使用连接池连接Oracle数据库
  • 2017-05-11Oracle CBO几种基本的查询转换详解
  • 2017-05-11Oracle 如何创建和使用全文索引
  • 2017-05-11oracle执行cmd的实现方法
  • 2017-05-11oracle数据库删除数据Delete语句和Truncate语句的使用比较
  • 2017-05-11Oracle 中 table 函数的应用浅析
  • 2017-05-11基于oracle中锁的深入理解

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Oracle开发之分析函数(Rank, Dense_rank, row_number)
    • Oracle Max函数使用中出现的问题
    • DBA 在Linux下安装Oracle Database11g数据库图文教程
    • oracle iSQL*PLUS配置设置图文说明
    • oracle错误代码大全(超详细)
    • Oracle 11g服务器与客户端卸载、安装全过程
    • oracle关键字作为字段名使用方法
    • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
    • 浅谈Oracle 11g 发行版2 新安装后关于登录的一些基本操作
    • Oracle的默认用户密码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有