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

SQL server 经验分享(五)重复记录的查询与删除

    博客分类:
  • sql
sql 
阅读更多

<一> 有相关ID标识

一.查找重复记录

1.查找所有重复记录

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)
 
SELECT *
FROM CompanyEmail c
WHERE ((SELECT COUNT(*)
FROM CompanyEmail  
WHERE Email= a.Email) > 1)
ORDER BY Email DESC

   查出相同orderid中创建时间最晚的记录

select t.Id from  Group_Require t,
(select max(CreateTime) x from Group_Require group by OrderId) 
xx where t.CreateTime=xx.x and t.OrderId=38

 

2.过滤重复记录(只显示一条ID最大的)

Select * From CompanyEmail  Where ID In (Select Max(ID) From CompanyEmail  Group By Email)

  

二.删除重复记录

 

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

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

  

2.保留一条,删除其他重复记录

Delete CompanyEmail Where ID Not In (Select Max(ID) From CompanyEmail Group By Email)

  

3. 删除多字段相同的重复记录,保留一条

delete CompanyEmail where ID not in (select max(ID) from CompanyEmail group by Email, Company)

  

 

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)

  

 <二>没有相关ID标识

这种情况可以使用Row_Number() Over 来实现重复记录的查询和删除:

原表:


查询重复记录:

Select Row_Number(),* Over(Partition By userName,userPwd order By userName) From [Temp].[dbo].[User];

 结果:


 删除重复记录:

Delete T From
(Select Row_Number() Over(Partition By userName,userPwd order By userName) As RowNumber,* From [Temp].[dbo].[User])T
Where T.RowNumber > 1;

 结果:


 三.根据两个字段查重复

我想查询表shiyan003,按xm,sfzhm这两个字段查

select *
  from shiyan003 a
 where exists (select 1
          from (select xm, sfzhm
                  from shiyan003
                 group by xm, sfzhm
                having count(*) > 1) s
         where s.xm = a.xm
           and s.sfzhm = a.sfzhm)

 

select * from 表名 a join (select ID,NAME from 表名 group by ID,NAME having count(*)>1) b on a.ID=b.ID and a.NAME=b.NAME order by a.NAME ,a.ID
ID和NAME是要查询的重复字段

 

  • 大小: 6.1 KB
  • 大小: 5.9 KB
  • 大小: 4.9 KB
3
1
分享到:
评论

相关推荐

    sqlServer删除重复数据

    SQL Server 删除重复数据 SQL Server 删除重复数据是数据库管理中的一项重要任务。重复数据可能是完全重复的记录,也可能是部分关键字段重复的记录。删除重复数据可以使用多种方法,包括使用 SELECT DISTINCT 语句...

    SQL语句删除重复记录

    SQL语句删除重复记录 在数据库管理中,删除重复记录是一个非常重要的操作。重复记录可能来自于数据导入、系统错误或者其他原因。今天,我们将探讨如何使用 SQL 语句删除重复记录。下面将介绍四种不同的方法来删除...

    40集SQL Server 基础入门视频教程 SQL Server 数据库基础入门必备课程

    12.SQL Server 2014查询表记录.mp4 13.SQL Server 2014修改表记录.mp4 14.SQL Server 2014删除表记录.mp4 15.SQL Server 2014条件限制where.mp4 16.SQL Server 2014 BETWEEN语法.mp4 17.SQL Server 2014子查询...

    SQL语句查询重复记录大全

    根据提供的标题、描述以及部分代码内容,我们可以整理出关于如何使用SQL语句查询及处理重复记录的相关知识点。本文将详细阐述这些知识点,并提供具体的SQL语句示例。 ### SQL语句查询所有重复记录 #### 1. 查询...

    SQL Server实用教程 第五版 课件 (郑阿奇)

    《SQL Server实用教程 第五版 课件 (郑阿奇)》是一套全面介绍SQL Server数据库管理系统的教学资源,由知名讲师郑阿奇编著。本教程针对SQL Server的第五个主要版本,提供了深入浅出的讲解,适合数据库原理课程学习...

    SQL删除重复行

    本文将详细讨论如何使用SQL语句来删除重复行,分为基于单个字段和多个字段的情况,并提供两种不同的方法。 首先,我们来看基于单个字段删除重复行的情况。假设我们有一个名为`people`的表,其中`peopleId`字段可能...

    查询及删除重复记录的SQL语句.

    Oracle 数据库提供了一系列 SQL 语句来帮助我们查询和删除这些重复的记录。以下是一些常用的 SQL 技巧,用于处理重复记录的问题。 1. **查询重复记录**: 当我们想找出基于单一字段(如 `Id`)的重复记录时,可以...

    如何强制删除或恢复SQLServer正在使用的数据库

    通常情况睛,SQLServer... 您可能感兴趣的文章:sqlserver只有MDF文件恢复数据库的方法sqlserver 数据库日志备份和恢复步骤asp 在线备份与恢复sqlserver数据库的代码SQLserver 数据库危险存储过程删除与恢复方法SQL Serv

    sql 查询重复数据

    本文将详细介绍查询和处理重复数据的方法,包括查找所有重复记录、查找重复记录、删除重复记录等。 查找所有重复记录 使用以下 SQL 语句可以查找所有重复记录: ```sql SELECT * FROM t_info a WHERE ((SELECT ...

    Devart dbForge Studio for SQL Server v5.2.177破解版.rar

    Devart dbForge Studio for SQL Server v5.2.177 Enterprise特别版为网友分享,仅用于学习交流,测试后删除。它是一款强大的SQL数据库开发软件,能够为开发者提供数据库的开发与分析等功能,能够对数据库进行...

    SQL_SERVER_2008R2中文安装与网络配置图文教程(win7_64位)

    资源名称:SQL_SERVER_2008R2中文安装与网络配置图文教程(win7_64位) 内容简介: SQL_SERVER_2008R2中文安装与网络配置图文教程(win7_64位) WORD版是 SQL_SERVER_2008R2中文安装与网络配置图文教程;本教程分为二...

    SqlServer连接工具

    1. 数据库查询与分析:通过查询编辑器执行SQL语句,进行数据检索、更新或删除。 2. 数据库设计:创建和修改表结构,设置约束,创建索引,以及定义存储过程和视图。 3. 数据导入导出:将数据从其他格式导入SQL Server...

    sql查询表中某字段下所有重复的记录

    sql查询表中某字段下所有重复的记录,删除某字段下重复记录最小的那笔记录

    【免费】Microsoft SQL Server JDBC Driver 2.0.rar 中文sqljdbc2.0驱动

    很小大概就4M,解压后里面有2个Jar包,sqljdbc4.jar和sqljdbc.jar,这两个都一样,只是针对你的JDK的版本的不同,如果你是JDK6.0直接导入sqljdbc4.jar,以下版本的导入sqljdbc.jar,如果怕麻烦的,两个都导进去也行...

    SQL查询分析器sql server专用

    4. `pfclnt80.dll` 和 `pfutil80.dll`:这些文件可能与Profiler相关,SQL Server Profiler是用于监视数据库活动的工具,可以跟踪和记录SQL Server事件,帮助找出性能瓶颈。 5. `sqlqry.dll`:此文件可能包含了SQL...

    用SQL删除重复记录的N种方法

    根据提供的标题、描述以及部分内容,本文将详细介绍使用SQL删除数据库表中的重复记录的不同方法。在实际操作中,去除重复数据是数据库管理中的常见需求之一,尤其是当数据来源于多个不同的源或者由于历史原因导致...

    sqlserver自动生成sql语句工具sqlserver转oracle

    在IT行业中,数据库管理系统是核心组成部分,SQL Server和Oracle分别是微软和甲骨文公司推出的两款广泛应用的关系型数据库系统。在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到...

    使用Oracle查询并删除重复记录的SQL语句

    使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据导入、数据整合和数据清洁等场景中。Oracle数据库提供了多种方式来查询和删除重复记录,本文将详细介绍这些方法...

    SQL Server 清空连接过的服务器名称历史记录

    对于SQL Server 2008,清空连接过的服务器名称历史记录的操作非常简单,只需要删除特定的`SqlStudio.bin`文件即可完成这一任务。然而需要注意的是,这个文件在不同的操作系统中位置是不一样的: - **Windows XP**:...

Global site tag (gtag.js) - Google Analytics