sql查询数据中重复记录并删除重复记录的方法总结

查找所有重复标题的记录:

    SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC  

一、查找重复记录

1、查找全部重复记录

    Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)  

2、过滤重复记录(只显示一条)

    Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)  

注:此处显示ID最大一条记录

二、删除重复记录

1、删除全部重复记录(慎用)

    Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)  

2、保留一条(这个应该是大多数人所需要的 ^_^)

    Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)  

注:此处保留ID最大一条记录

三、举例

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)  

四、补充

有两个以上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如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)

时间: 2024-08-30 14:11:59

sql查询数据中重复记录并删除重复记录的方法总结的相关文章

Mysql中如何查找并删除重复数据

考试系统中做了一个用户导入试题功能,导致用户导入了很多重复的试题,我需要查询及删除一下重复的记录,于是有了这篇文章. (一)单个字段 1.查找表中多余的重复记录,根据(question_title)字段来判断  代码如下 复制代码 select * from questions where question_title in (select question_title from people group by question_title having count(question_title

SQL查询数据库中符合条件的记录的总数_MsSql

1. select count(*) from table; //统计元组个数 2. select count(列名) from table; //统计一列中值的个数 3. select count(*) from table where 字段 = ""; //符合该条件的记录总数 4. sql_count = "select count(*) from article a where 1=1 "; //这条语句中a就代表article 这张表,后面可以写a.字段来

SQL查询语句中的bool类型字段值的写法

  SQL查询语句中的bool类型字段值的写法 没有系统地看过SQL语句的写法说明,只是看了一些常用SQL语句的例子.今天写了条select * from table where sex='true',老是提示标准数据类型不匹配(我用的Access),检查了半天,原来sex字段作为bool(是/否)类型,在SQL语句中其值不需要用''引起来.

sql中查询重复记录与删除重复记录

1.查找全部重复记录  代码如下 复制代码 Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 2.过滤重复记录(只显示一条)  代码如下 复制代码 Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) 注:此处显示ID最大一条记录 SQL Server删除重复行是我们最常见的操作之一,下面就为您

sql查询重复记录、删除重复记录方法大全

查找所有重复标题的记录: ? 1 SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一.查找重复记录 1.查找全部重复记录 ? 1 Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 2.过滤重复记录(只显示一条) ?

数据存储-c++两文本文件删除重复字段

问题描述 c++两文本文件删除重复字段 现在有两个文本文件:一个源文件,一个目标文件.每个文件大概有2w+行的数据,一行是一个字段.现在想要写一个小程序,将源文件中的在目标文件中已存在的字段删除.如果全文读取遍历比较的话计算量有些大.不知道该用什么方式实现要好些.求大神们帮帮忙啊. 解决方案 把目标文件全部读入内存,放入hashmap之类的变量.然后从源文件中读入一行,去hashmap里判断是否存在,是就删除.直到源文件读完. 解决方案二: 全部读取到内存,排序比较.2万多其实没多少,相对于现在

sql查询语句中字段和要查询的内容都为变量的参数化写法

问题描述 DimcnAsNewSqlClient.SqlConnection(cnStr)DimsqlAsString="Select*From员工信息where"&PnodeText&"=@Node"Dimcmd=NewSqlClient.SqlCommand(sql,cn)DimdaAsNewSqlClient.SqlDataAdapter(cmd)'定义sqldataadapter并于sqlcommand连接Dimds=NewDataSet()

删除SQL Server数据中指定的重复记录

  delete from 表 where 主键=(select top 1 主键 from 表 where 相同字段=(select 相同字段 from 表 group by 相同字段 having count(*)>1)) 主键是表中绝对没有重复值的字段,如自动增量ID; 相同字段如"采集时间",删除表中采集时间相同的记录 本语句,每执行一次,只能删除一条重复记录,如果有三条记录有相同"采集时间",就要循环执行该语句两次.

从Microsoft Sql Server 2005中返回有一定顺序的记录集

摘要:应用SqlServer2005开发也已经有一段时间了,但是很多时候都是把SqlServer2005当做SqlServer2000来用,因此很多SqlServer2005的新特性我都没有用到,有一个原因就是要兼容SqlServer2000的用户.新特性出来的当然就要用于实际当中,要想知道SQLServer2005的新特性可以参看微软网站的What's New in SQL Server 2005? ,特性有很多本篇文章主要介绍的是在数据库中返回特定顺序的记录集. 数据库模型: 在我们深入Sq