`
zhouxueliang
  • 浏览: 35461 次
  • 性别: 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数据库的增、删、改、查操作。 首先,我们需要理解JDBC的基本组件和工作流程。JDBC提供了一组接口和类,使得Java应用程序能够连接到数据库,执行SQL语句并处理结果。核心...

    oracle删除和重建实例

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

    删oracle注册表.md

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

    oracle jdbc驱动包

    Oracle JDBC驱动的性能可以通过配置JDBC URL和连接池参数进行优化,比如设置超时、缓存大小、自动重试策略等。 8. 兼容性与安全性: 确保JDBC驱动版本与Oracle数据库版本兼容,同时注意安全问题,如定期更新驱动以...

    Oracle增删改查常用操作.docx

    在Oracle数据库中,对数据进行增、删、改、查(CRUD)是最基本的操作,这些操作涉及到表的管理和数据的处理。以下是对Oracle数据库中常用CRUD操作的详细说明: 1. **创建表**: 使用`CREATE TABLE`语句来创建新的...

    如何规划Oracle数据库的License和支持费用.docx

    华为最新发布的 Dorado V3,为全闪存设计,打开重删压缩的稳定时延也在 0.5ms 以下,而且还支持对称的阵列双活,可以和 Oracle RAC 组成高可用的双活系统,实现更高的可靠性。 此外,我们还可以通过选择标准版来...

    mysql driver + oracle driver jar包 驱动包

    这样,当应用运行时,系统就能自动找到并使用这些驱动来建立数据库连接,执行数据库操作,从而完成数据的增删改查等功能。在编写Java代码时,应遵循JDBC的一般编程规范,例如使用try-with-resources语句来确保资源的...

    完全删除Oracle数据库的方法

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

    2013年中国数据库大会-35-OracleExaData 一体机的高效备份之道

    11. 重删技术对比:提出了三种传统重删方案的对比和优缺点,包括网络带宽占用、数据传输时间、服务器资源占用以及备份窗口的长短等问题。 整体而言,文章围绕着Exadata一体机的高效备份之道进行探讨,介绍了Exadata...

    C语言OCI操作oracle类

    在C语言中,通过调用这些函数,程序员可以实现对Oracle数据库的增删查改等操作。例如,`OCILogon()`用于建立数据库连接,`OCIParse()`用于解析SQL或PL/SQL语句,`OCIBindByPos()`用于绑定参数,`OCIDefineByPos()`...

    完全卸载oracle方法

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

    Oracle数据库的备份及恢复策略研究.doc

    每个Oracle实例至少有一组重作日志文件,用于记录所有数据库更改。默认情况下,Oracle可能只创建一组重作日志文件,但这增加了单点故障的风险。因此,推荐设置多工联机重作日志文件,即在每个组中添加多个文件进行...

    Oracle GoldenGate 产品介绍和案例2009.pdf

    首先,它利用捕捉进程(Capture Process)在源数据库端读取在线重做日志或归档日志,从中解析出所有数据变化(如增、删、改操作),并将这些变化信息转换为GoldenGate TDM特有的中间格式,存放在队列文件中。...

    oracle 数据库复制 goldengate

    捕捉进程负责在源数据库端解析在线重做日志或归档日志,提取出增、删、改等操作,并将其转换为GoldenGate特有的中间格式,存储在队列文件中。传送进程则负责将这些变更通过网络传输到目标系统。投递进程在目标端接收...

    Oracle.rar

    它定义了一组接口和类,允许Java程序通过标准接口执行SQL语句,实现数据的增删查改。JDBC提供了一种统一的方法来处理不同类型的数据库,减少了开发者针对特定数据库的学习成本。 2. OJDBC版本解析: - ojdbc8.jar:...

    Oracle从基础到熟练(太实用了)

    - **增删改查操作**涉及到INSERT、DELETE、UPDATE语句以及SELECT语句。 - **约束**包括 PRIMARY KEY、FOREIGN KEY、UNIQUE、CHECK等,确保数据完整性。 5. **锁与表分区**: - **锁机制**用于解决并发控制问题,...

    OracleGoldenGate的HA解决方案探析.docx

    1. **数据捕获**:GoldenGate 在源端数据库通过 Capture Process 读取在线日志或归档日志,解析其中的数据变化(如增、删、改操作),并将相关信息传送到目标系统。每次读取并传送数据变化后,Capture Process 会...

    ORACLE命令大全二.pdf

    9. **数据的增删改查**:Oracle提供INSERT、UPDATE、DELETE和SELECT等基础SQL语句,用于插入、更新、删除和查询数据。同时,还可以使用COMMIT和ROLLBACK进行事务管理。 10. **索引与视图**:通过CREATE INDEX命令...

Global site tag (gtag.js) - Google Analytics