SQL重复记录查询的几种方法

2013-11-03  来源:本站原创  分类:MsSql  人气:4 

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 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
)
相关文章
  • SQL重复记录查询的几种方法 2013-11-03

    SQL重复记录查询的几种方法,需要的朋友可以参考一下 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count (peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 复制代码 代码如下: delet

  • SQL重复记录查询(转载) 2014-03-24

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select*frompeople wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1) 例二: select*fromtesttable wherenumeber in (selectnumberfrompeoplegroup bynumberhaving count(number) > 1 ) 可以查出tes

  • SQL重复记录查询 2010-08-05

    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

  • SQL 重复记录查询 2013-08-28

    mysql> create temporary table tmp_wrap select * from users_groups group by uid having count(1) >= 1; Query OK, 7 rows affected (0.11 sec) Records: 7 Duplicates: 0 Warnings: 0 mysql> truncate table users_groups; Query OK, 14 rows affected (0.03 se

  • SQL 重复记录问题的处理方法小结 2014-08-11

    SQL 重复记录问题的处理方法小结,需要的朋友可以参考下. 1.查找重复记录 ①如果只是不想在查询结果中存在重复记录, 可以加Distinct select distinct * from TestTable ②如果是想查询重复的记录及其数量 select UserID,UserName,count(*) as '记录数' from TestTable Group by UserID,UserName having count(*)>1 ③ID不重复, 但是字段重复的记录只显示一条 select

  • mysql中优化sql语句查询的30种方法(转) 2013-01-09

    mysql中优化sql语句查询的30种方法: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,

  • Shell脚本中执行sql语句操作mysql的5种方法 2013-10-03

    这篇文章主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中.命令行调用单独的SQL文件.使用管道符调用SQL文件等方法,需要的朋友可以参考下 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到sh

  • Oracle中在pl/sql developer修改表的2种方法 2013-12-19

    Oracle中在pl/sql developer修改表的2种方法,需要的朋友可以参考一下 一.方式一 select * from student for update student表需要操作人修改完commit之后才可以做其他的操作,否则该表会被锁住. 二.方式二 select t.*,t.rowid from student t 在pl/sql developer中右击某表,显示的就是该语句,这样做不会将该表锁住. 想修改某几个字段也没有问题select num,name,t.rowid f

  • 浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用 2014-05-18

    SQL语句行列转换的两种方法 case...when和pivot函数应用,运用pivot 函数只支持数据库版本2005以上的.一般运用case when else end 的方法比较多,比较普遍 /*创建数据库*/ CREATE DATABASE tmp go USE tmp go /*创建数据库测试表*/ CREATE TABLE [Scores] ( [ID] INT IDENTITY(1, 1) PRIMARY KEY , [Student] VARCHAR(20) , [Subject]

  • Sql server2005 优化查询速度50个方法小结 2014-09-06

    Sql server2005优化查询速度51法查询速度慢的原因很多,常见如下几种,大家可以参考下. I/O吞吐量小,形成了瓶颈效应. 没有创建计算列导致查询不优化. 内存不足. 网络速度慢. 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量). 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷). sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 返回了不必要的行和列. 查询语句不好,没有优化. 可以通过如下方法来优化查询 : 1.把数据.日志.索引放到不同的I

  • MYSQL插入处理重复键值的几种方法 2014-04-26

    当unique列在一个UNIQUE键上插入包含重复值的记录时,默认insert的时候会报1062错误,MYSQL有三种不同的处理方法,下面我们分别介绍. 先建立2个测试表,在id列上创建unique约束. mysql> create table test1(id int,name varchar(5),type int,primary key(id)); Query OK, 0 rows affected (0.01 sec) mysql> create table test2(id int,

  • php生成不重复随机数.数组的4种方法分享 2013-11-27

    这篇文章主要介绍了php生成不重复随机数.数组的4种方法分享,本文直接给出实现代码,并对生成效率做了对比,需要的朋友可以参考下 下面写几种生成不重复随机数的方法,直接上代码吧 <?php define('RANDOM_MAX', 100); define('COUNT', 10); echo 'max random num: '.RANDOM_MAX, ' ;result count:'.COUNT, '<br/>'; invoke_entry('rand1'); invoke_entr

  • SQL重复记录处理(查找,过滤,删除) 2012-07-02

    注:此处"重复"非完全重复,意为某字段数据重复 HZT表结构 ID int Title nvarchar(50) AddDate datetime 数据 ID Title AddDate 1 我本有心1 2008-01-17 10:27:24.827 2 我本有心1 2008-03-17 10:27:21.780 3 我本有心2 2008-05-17 10:27:30.420 4 我本有心2 2008-09-17 10:27:30.420 5 我本有心3 2008-01-20 10:2

  • PHP查询数据库中满足条件的记录条数(两种实现方法) 2015-04-24

    在需要输出网站用户注册数或者插入数据之前判断是否有重复记录时,就需要获取满足条件的MySQL查询的记录数目,接下来介绍两种查询统计方法,感兴趣的朋友可以了解下啊,或许对你有所帮助 在需要输出网站用户注册数,或者插入数据之前判断是否有重复记录的时候,就需要获取满足条件的MySQL查询的记录数目. 第一种方法:查询时候直接统计 $sql="SELECT COUNT(*) AS count FROM TABLE WHERE id='$id'"; $result=mysql_fetch_arr

  • Oracle提高SQL执行效率的3种方法 2014-03-10

    Oracle提供了多种方法在执行带有大量执行计划的复杂查询时剖析过程会拖累系统的性能,感兴趣的朋友可以了解下 Oracle提供了多种方法用于减少花在剖析Oracle SQL表达式上的时间,在执行带有大量执行计划的复杂查询时剖析过程会拖累系统的性能.现在我们来简要地看看这些方法中的几种. 1.使用ordered提示 Oracle必须花费大量的时间来剖析多表格的合并,用以确定表格合并的最佳顺序.如果SQL表达式涉及七个乃至更多的表格合并,那么有时就会需要超过30分钟的时间来剖析,因为Oracle必须

  • SQL语句去掉重复记录,获取重复记录 2014-07-09

    SQL语句去掉重复记录,获取重复记录 --查询一个表中有效去掉重复的记录,UserID为自增长主键,RoleID为重复字段 SELECT MIN(UserID) AS UserID, RoleID FROM tmpTable GROUP BY RoleID SELECT RoleID FROM tmpTable GROUP BY RoleID HAVING (COUNT(*) > 1) SELECT DISTINCT * FROM tmpTable sql语句查询 sql server acce

  • SQl 跨服务器查询语句 2014-12-09

    SQl跨服务器查询的二种实现方法,一般情况如果安全设置好了,根本无法用,不过内部网络还是不错的. select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名 insert 本地库名..表名 select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.

  • SQL语句实现删除ACCESS重复记录的两种方法 2014-06-12

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 以下就重复记录删除的问题作一阐述. 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 1.对于第一种重复,比较容易解决,使用 select distinct * from tableName 就可以得到无重复记录的结果集. 如果该

  • 浅谈MySQL中优化sql语句查询常用的30种方法 2014-05-06

    本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在n

  • MySQL查询及删除重复记录的方法 2010-03-03

    MySQL查询及删除重复记录的方法 2009-07-31 17:03 查询及删除重复记录的方法 (一) 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有row