专栏首页学习分享-实践为王【实践结果】Oracle 查询重复数据方法
原创

【实践结果】Oracle 查询重复数据方法

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)

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 intege

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

)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

关注作者,阅读全部精彩内容

我来说两句

0 条评论
登录 后参与评论

相关文章

  • EasyGBS云端录像查询结果跟实际的查询结果不同调整方法

    近期我们一直在对EasyGBS的云端录像做测试,其中一个重要原因就是广大用户对云端录像的要求不断提高,因此对于云端录像的检查仍然是必不可少的一个环节。在测试过程...

    TSINGSEE青犀视频
  • Android中的sqlite查询数据时去掉重复值的方法实例

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关...

    砸漏
  • 在 Laravel 6 中缓存数据库查询结果的方法

    在加快应用程序速度方面,缓存可能是最有效的。Laravel 预先安装了缓存驱动程序。因此你可以直接使用 Redis, Memcached 或者使用本地文件进行缓...

    砸漏
  • 查询结果集合成一列的sqlserver实现方法stuff

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    逝兮诚
  • 新书连载:Oracle数据库的跟踪和分析方法

    编辑说明:《Oracle性能优化与诊断案例精选》出版以来,收到很多读者的来信和评论,我们会通过连载的形式将书中内容公布出来,希望书中内容能够帮助到更多的读者朋友...

    数据和云
  • Oracle 数据库SQL语句查询oracle数据库表主键,查看oracle指定表的表结构实例演示

    小蓝枣
  • DBA不失业:云时代的数据库性能优化全攻略

    性能问题是数据库中最重要也是最迫切要解决的问题之一,随着业务的发展和数据的不断加增,用户对于系统的响应速度的要求越来越高。而归根结底就是要提高数据库系统的性能。...

    数据和云
  • python pymysql链接数据库查询结果转为Dataframe实例

    众所周知, pymssql 库并不支持(暂时?)调用存储过程,只能使用原生的sql 语句让其调用。

    砸漏
  • Oracle 数据库sql语句查看字符集,PG数据库查询字符集方法

    【Oracle 数据库查询字符集】 查询出 NLS_NCHAR_CHARACTERSET 参数的值即是数据库的字符集。

    小蓝枣
  • SQL递归查询知多少

    最近工作中遇到了一个问题,需要根据保存的流程数据,构建流程图。数据库中保存的流程数据是树形结构的,表结构及数据如下图: ? 仔细观察表结构,会发现其树形结构的特...

    圣杰
  • 跨查询定位数据:换个方法轻松实现合并查询

    大海:可以的,比如有时候只需要匹配另一个表里某一项内容,觉得用合并查询的方式太“重”,那么可以直接通过跨查询引用和定位的方式来实现,比如这个订单明细表和产品表的...

    大海Power
  • Oracle初级性能优化总结

      关于对Oracle数据库查询性能优化的一个简要的总结。 从来数据库优化都是一项艰巨的任务。对于大数据量,访问频繁的系统,优化工作显得尤为重要。由于Oracl...

    aehyok
  • 挖出一些分页查询的秘密

    测试表中符合条件的记录共32条,如果需要得到第10到第20条的记录,我们能怎么做?

    bisal
  • 挖出一些分页查询的秘密

    测试表中符合条件的记录共32条,如果需要得到第10到第20条的记录,我们能怎么做?

    bisal
  • 数据库中间件TDDL调研笔记

    前篇: 《数据库中间件cobar调研笔记》 13年底负责数据库中间件设计时的调研笔记,拿出来和大家分享,轻拍。 一,TDDL是什么 TDDL是Taobao Di...

    架构师之路
  • CRM product搜索结果重复数据的一个解决方案

    When using approach 2 to implement POC, in X3C/504, all the product id are the s...

    Jerry Wang
  • Oracle SQL调优记录

    本博客只记录工作中的一次oracle sql调优记录,因为数据量过多导致的查询缓慢,一方面是因为业务太过繁杂,关联了太多表。面对复杂的业务场景,确实有些情况是需...

    SmileNicky
  • Oracle注入

    Step 1:准备oracle安装包,解压缩。本次安装的是Oracle Database 11g Release 2 (11.2),官方下载地址:

    贝塔安全实验室
  • 实践实战:在PoC中的Oracle 12c优化器参数推荐

    最近,Oracle数据库优化器的产品经理 Nigel Bayliss 发布了一篇文档,介绍:Setting up the Oracle Optimizer fo...

    数据和云

扫码关注云+社区

领取腾讯云代金券