`
xupo
  • 浏览: 214891 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于数据库重复记录

阅读更多

Oracle数据库

如何查找重复记录? 
  

SELECT * FROM TABLE_NAME 
   WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
   WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2); 

 

如何删除重复记录? 
  

DELETE FROM TABLE_NAME 
   WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
   WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2); 

 

查询及删除重复记录的方法
(一)
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 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

)
分享到:
评论

相关推荐

    基于深度学习的大规模数据库重复记录删除研究.pdf

    基于深度学习的大规模数据库重复记录删除方法首先对已有数据库重复记录删除方法进行分析,找到引起数据库重复记录删除不理想的因素,然后采用深度学习算法对数据库重复记录数据进行学习,建立数据库重复记录的分类器...

    怎样删除数据库中重复记录

    删除数据库中重复记录的经典方法 删除数据库中重复记录是数据库管理中一个常见的问题,特别是在数据量庞大的时候。今天,我们将讨论删除数据库中重复记录的经典方法,包括使用 SQL 语句和其他技巧。 查找表中多余...

    基于深度学习的数据库重复记录检测算法.pdf

    针对这一问题,该文提出了一种结合深度学习和支持向量机的数据库重复记录检测算法,并采用了量子粒子群优化算法来优化SVM的参数,以提升检测的准确性和效率。 深度学习在大数据处理和模式识别方面表现出色,尤其在...

    数据库重复记录清除程序VB源码版.rar

    数据库重复记录清除程序VB源码版,删除Access数据库中重复的记录,重复记录在数据库中是无用的,而且还会增大数据库的体积,但是找出这些重复记录如果用人工的话,太麻烦,所以写了这个自动找出重复记录并删除这些...

    删除数据库中的重复记录

    当数据库中出现重复记录时,可能会导致数据分析不准确,浪费存储空间,甚至可能引发一致性问题。本篇文章将深入探讨如何在SQL数据库,如Microsoft Access(.accdb)中查找并删除重复记录。 一、查找重复记录 1. ...

    清除SQL数据库里的重复记录

    因此,定期清理重复记录是保持数据库健康的重要环节。本教程将深入讲解如何在SQL数据库中检测并删除重复记录,以确保数据的唯一性和准确性。 首先,我们需要理解SQL中的"唯一性"。一个表的字段如果要求唯一,意味着...

    Delphi自动删除数据库中重复记录..rar

    在使用 Delphi 进行数据库开发时,有时我们需要处理数据集中存在的重复记录问题。这个压缩包文件"Delphi自动删除数据库中重复记录.."提供了一个解决方案,可能是通过 Delphi 代码来实现对数据库中重复记录的自动检测...

    删除Access数据库中重复的记录

    在Access中一般只能查找10行大概20条重复记录,这样程序就可以任意指定表及多字段检索重复记录,并把重复的记录移除到一个临时表中,并不是进行真正删除,你可以进行恢复。但是执行第二次查找时则自动删除上次查找的...

    删除数据表中重复记录

    本文将详细介绍如何在不同的数据库系统(如MySQL、SQL Server、Oracle等)中删除重复记录。 #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录...

    VB删除Access数据库中重复记录(已测试,编译通过)

    在Access中一般只能查找10行大概20条重复记录,这样程序就可以任意指定表及多字段检索重复记录,并把重复的记录移除到一个临时表中,并不是进行真正删除,你可以进行恢复。但是执行第二次查找时则自动删除上次查找的...

    易语言数据库是否重复

    下面将详细阐述易语言数据库操作的相关知识点,以及如何实现“数据库是否重复”的功能。 首先,易语言提供了丰富的数据库接口,允许程序员通过编写代码与各种类型的数据库(如SQL Server、MySQL、Access等)进行...

    wxh Oracle数据库删除重复记录的方法

    根据给定的文件标题、描述和部分内容,我们可以深入探讨Oracle数据库中删除重复记录的方法,这对于维护数据完整性和提高系统性能至关重要。以下将详细介绍几种在Oracle数据库中有效删除重复记录的技术。 ### 1. ...

    Oracle数据库删除表中重复记录的方法三则.txt

    ### Oracle数据库删除表中重复记录的方法 在Oracle数据库管理中,经常会遇到需要处理表中的重复数据的情况。重复数据不仅会占用不必要的存储空间,还可能导致数据统计错误或业务逻辑混乱等问题。因此,掌握如何有效...

    删除Access数据库中重复的数据

    5. **删除重复数据**:在确认了要删除的重复记录后,可以使用Access的“删除查询”功能来移除它们。但请注意,删除操作是不可逆的,因此在执行前务必备份数据。 6. **自动化过程**:如果经常需要进行此操作,可以...

    kettle统计重复记录个数及明细

    通过以上步骤,我们不仅可以了解数据中重复记录的数量,还可以深入理解每条重复记录的详细信息,这对于数据治理、数据质量检查和业务洞察都至关重要。在实际工作中,Kettle这样的ETL工具可以帮助我们高效地处理复杂...

    删除数据库中重复的数据(只保留一条)

    在数据库管理过程中,经常会遇到需要清理数据的情况,其中一种常见需求就是删除数据库中的重复记录,同时确保每条数据的关键字段只保留一条记录。这种操作在维护数据一致性、提高查询效率等方面具有重要意义。根据...

    数据库 查询删除重复数据

    数据库查询删除重复数据是数据库管理中的一项重要操作,旨在查找和删除表中的重复记录。重复记录是根据单个字段或多个字段来判断的。下面介绍几种查找和删除重复记录的方法。 根据单个字段查找和删除重复记录 可以...

    Delphi获取重复的数据库记录..rar

    总的来说,Delphi提供了解决数据库重复记录问题的强大工具和灵活性。无论选择SQL查询还是编程逻辑,关键在于理解你的数据和业务需求,从而选择最合适的解决方案。同时,确保在处理数据时备份原始数据,以防止不可逆...

    Delphi找出数据库重复数据..rar

    本资源"Delphi找出数据库重复数据"提供了一个解决方案,帮助开发者高效地定位并处理这些重复信息。 首先,我们需要理解什么是数据库中的重复数据。重复数据通常指的是在特定字段或一组字段中存在完全相同的记录,这...

    通过存储过程删除Mysql数据库表中的重复记录.pdf

    在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用于执行复杂的数据库操作,如删除重复记录。在给定的存储过程`DelDuplicateRecord`中,它旨在删除具有相同标题的记录,但仅保留每个标题下最早的一条记录...

Global site tag (gtag.js) - Google Analytics