sql语句查询重复的数据(最新推荐)

 更新时间:2023年05月31日 10:10:24   作者:小蚂蚁hjk  
这篇文章主要介绍了sql语句查询重复的数据,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

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)

到此这篇关于sql语句查询重复的数据的文章就介绍到这了,更多相关sql查询重复的数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL注入语义分析库libinjection简介

    SQL注入语义分析库libinjection简介

    libinjection是一款用于防御SQL注入攻击的开源软件库,它可以通过对不同语句进行词法分析和语法分析来实现对SQL语句以及HTML语句的解析,这篇文章主要介绍了SQL注入语义分析库libinjection,需要的朋友可以参考下
    2023-03-03
  • Windows2012配置SQLServer2014AlwaysOn的图解

    Windows2012配置SQLServer2014AlwaysOn的图解

    SQLserver 2014 AlwaysOn增强了原有的数据库镜像功能,使得先前的单一数据库故障转移变成以组(多个数据)为单位的故障转移。接下来通过本文给大家介绍Windows2012配置SQLServer2014AlwaysOn的方法,感兴趣的朋友一起学习吧
    2016-04-04
  • sql中的char与varchar有什么区别

    sql中的char与varchar有什么区别

    varchar使用起来较为灵活,节省了一定的空间,但是它在判断位数时也耗费了时间,从整个系统的性能角度来说,char数据类型处理的速度更快,有时甚至可以超出varchar处理速度的很多倍,本文给大家介绍
    sql中的char与varchar有什么区别,一起看看吧
    2023-10-10
  • 解读SQL一些语句执行后出现异常不会回滚的问题

    解读SQL一些语句执行后出现异常不会回滚的问题

    这篇文章主要介绍了解读SQL一些语句执行后出现异常不会回滚的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 50个常用sql语句 网上流行的学生选课表的例子

    50个常用sql语句 网上流行的学生选课表的例子

    这篇文字在网上被转载烂了,里面有些sql适合用在应用系统里,有些“报表”的感 觉更重些,主要是想复习前者
    2012-06-06
  • SQL Server数据库的死锁详细说明

    SQL Server数据库的死锁详细说明

    死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待,下面这篇文章主要给大家介绍了关于SQL Server死锁的相关资料,需要的朋友可以参考下
    2024-07-07
  • SQL删除多列语句的写法

    SQL删除多列语句的写法

    这篇文章主要介绍了SQL删除多列语句的写法,非常简单,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • SqlServer 多种分页方式 详解(含简单速度测试)

    SqlServer 多种分页方式 详解(含简单速度测试)

    这篇文章主要介绍了SqlServer 多种分页方式 (含简单速度测试),附带50万数据分页时间[本机访问|已重启SQL服务|无其他程序干扰][非索引排序],需要的朋友可以参考下
    2022-12-12
  • MSSQL 清空数据库的方法

    MSSQL 清空数据库的方法

    清空数据库里所有的表 清除数据库里的所有数据
    2008-12-12
  • sqlserver数据库高版本备份还原为低版本的方法

    sqlserver数据库高版本备份还原为低版本的方法

    这篇文章主要为大家详细介绍了sqlserver数据库高版本备份还原为低版本的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11

最新评论