`
zhouxueliang
  • 浏览: 34606 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

oracle 删重

阅读更多
查询并删除重复记录的SQL语句

查询及删除重复记录的SQL语句
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select   peopleId from   people group by   peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
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)

注:rowid为oracle自带不用该.....

3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in   (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
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)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
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)
(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果还查性别也相同大则如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三)
方法一
declare @max integer,@id integer
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 方法二
"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
  1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
  就可以得到无重复记录的结果集。
  如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
  发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
  2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
  假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
  最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
(四)
查询重复
select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1
)
分享到:
评论

相关推荐

    JDBC实现Oracle数据库的增删改查

    JDBC实现Oracle数据库的增删改查

    oracle删除和重建实例

    1. 进入实例重装页面:使用 dbca 工具或手动创建实例,进入实例重装页面。 2. 填写实例信息:填写实例信息,包括实例名、SID、数据库文件的路径等。 3. 配置实例参数:配置实例参数,包括字符集、国家语言、时区等...

    删oracle注册表.md

    由于前几天搞了把Python连oracle,结果plsql登录不了了,重装oracle还给我报错,到网络连接那步死活过不去了。于是乎硬着头皮各种试,最后把注册表啥的都删删干净,搞了个免安装的版的,配了个path,亲测有效,需要...

    三种Windows版本下如何卸载Oracle

    在卸载Oracle时删不干净,搞的要重装系统,本文总结了在三种Windows版本下卸载Oracle的方法。

    完全删除Oracle数据库的方法

    很多人只用了Oracle的删除,但很多情况下,会发现重新安装时,点了下一步安装界面就消失了,往往无奈下只好重装系统,其实只是你数据库没删干净,删干净就不会出现这种情况了。本文介绍了完全删除Oracle数据库的方法...

    怎样卸载Oracle

     9、 重新启动计算机,重起后才能完全删除Oracle所在目录  10、 删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入  口目录及所有子目录,并从Windows 2000目录(一般为C:\WINNT)下删除...

    完全卸载oracle方法

    近日,有新手在卸载oracle时删不干净,搞的要重装系统,本人在工作中总结出如下方法,希望对大家有所帮助.

    存储HCIE-Storage视频教程64讲.zip

    网盘文件永久链接 01指导 02指南 03 数据库派系介绍 04 oracle结构和4大文件 05 oracle RDBMS安装 06 DB安装和深入解读oracle以及sql语句 07 sql语句之表操作 ...17 备份组网和备份介质和重删介绍 ................

    oracle卸载完整版(二个方法)

    oracle卸载,俩个方法,绝对卸载的干干净净!傻瓜式操作!绝对放心~

    C# 写的数据库查看器 支持SQL2000和oracle10g 高亮语法输入提醒

    8,查询菜单下有个【清理垃圾表】,是针对oracle中的回收站功能设定的,可以删去此方案中回收站中的表BIN$啥啥的。 输入时有闪动的问题暂时没能完美解决。 时间仓促很多功能还没有时间做完,希望大家多提意见。 ...

    oracle快速删除重复的记录

    Oracle 快速删除重复记录 在 Oracle 数据库中,删除重复记录是一项常见的操作,尤其是在大型数据表中。删除重复记录可以提高数据的准确性和一致性。本文总结了四种删除重复记录的方法,每种方法都有其优缺点。 ...

    华为HCIE-Storage理论和面试培训视频教程【共36集】.rar

    4.1 重删压缩 4.2 Cow快照 4.3 Row快照 4.4 远程复制 4.5 克隆、卷镜像和Lun拷贝 4.Oracle大法-必 5.1 配额和worm 5.2 性能调优 5.3 故障处置与信息收集 6.1 大数据简介 6.2 EC算法 6.3 全局缓存 6.4 ...

    JDBCUtil.java

    JDBC工具类,实现Oracle,Mysql,sqlserver数据库连接,访问数据库,实现增删改查,以及实体类反映射查询。具备数据库断开重连的功能。使用者可根据个人需要对代码进行调整以实现手动提交事务。源码已献上!

    华为HCIE-Storage培训视频教程【共28集】.rar

    4.2 qos partition cache 配额 重删压缩 5.1 特性回顾 COW快照 5.2 ROW 远程复制 lun拷贝 克隆 卷镜像 6.1 特性应用场景 6.2 调优 故障处置 7.1 9000软件架构 ec 7.2 9000 EC 负载均衡 8.1 9000知识点回顾 ...

    DNetORM源码 CODEDNetORM.rar

    所以像mybatis、nhibernate这种重配置的orm我并不喜欢,EF算是一个功能强大的框架,但是EF也有一些缺陷,过于笨重,另外EF对于mysql、oracle的支持并不友好。另外还有一些其他框架接口封装的不友好、要么写法过于...

    娱乐先锋论坛 KQJBBS 4.7版

    (53)论坛积分设置,包括发贴、回帖、总固顶、固顶、精华、删主贴、删回帖等的积分设置 (54)楼主可以根据跟贴数量获得积分奖励 (55)发贴可以开放/关闭HTML, 开放/关闭KQJ代码。KQJ代码是一些设置...

    娱乐先锋论坛KQJBBS 5.1版

    (53)论坛积分设置,包括发贴、回帖、总固顶、固顶、精华、删主贴、删回帖等的积分设置 (54)楼主可以根据跟贴数量获得积分奖励 (55)发贴可以开放/关闭HTML, 开放/关闭KQJ代码。KQJ代码是一些设置...

    基于web的工资管理系统课程设计.doc

    而工资管理又是人力资源管理的重中之 重。 1.2开发意义 工资管理系统对于一个企业而言意义重大。可以通过该系统对企业信息以及企业职工 工资进行管理,便以企业人事资源管理。有利于减少错误,减轻人事部门的任务,...

    AppFramework_V1.0_New

    除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象的持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立的逻辑领域,其主要目的有: <br>1、 ...

    数据库优化设计方案.doc

    SGA包括以下几个部分 : 1、数据块缓冲区(data block buffer cache)是SGA中的一块高速缓存,占整个数据库大小的1%- 2%,用来存储从数据库重读取的数据块(表、索引、簇等),因此采用least recently used (LRU,...

Global site tag (gtag.js) - Google Analytics