`
evget
  • 浏览: 144664 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类

MSSQL中部分字段重复数据的删除

阅读更多
文章关键字:|MSSQL|字段|重复|数据|删除|

  我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢?

  重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。

一、对于部分字段重复数据的删除

  先来谈谈如何查询重复的数据吧。下面语句可以查询出那些数据是重复的:

  select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1

  将上面的>号改为=号就可以查询出没有重复的数据了。想要删除这些重复的数据,可以使用下面语句进行删除

  delete from 表名 a where 字段1,字段2 in

  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

  上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

  CREATE TABLE 临时表 AS

  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

  上面这句话就是建立了临时表,并将查询到的数据插入其中。下面就可以进行这样的删除操作了:

  delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);

  这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。

  这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。

  在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了 。

下面是查询重复数据的一个例子:

select a.rowid,a.* from 表名 a

where a.rowid !=

(

select max(b.rowid) from 表名 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

)


  下面我就来讲解一下,上面括号中的语句是查询出重复数据中rowid最大的一条记录。而外面就是查询出除了rowid最大之外的其他重复的数据了。由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:

delete from 表名 a

where a.rowid !=

(

select max(b.rowid) from 表名 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

)

  随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。

create table 临时表 as

select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;

delete from 表名 a

where a.rowid !=

(

select b.dataid from 临时表 b

where a.字段1 = b.字段1 and

a.字段2 = b.字段2

);

commit;

二、对于完全重复记录的删除

  对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:

  select distinct * from 表名

  可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:

  CREATE TABLE 临时表 AS (select distinct * from 表名);

  drop table 正式表;

  insert into 正式表 (select * from 临时表);

  drop table 临时表;

  如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下:

  INSERT INTO t_table_bak

  select distinct * from t_table;


未完,原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9221
分享到:
评论

相关推荐

    mysql多字段删除重复数据保留id最大的.txt

    mysql多字段删除重复数据保留id最大的.txt

    MySQL中如何处理重复数据(Duplicate)?

    MySQL 中处理重复数据(Duplicate)的方法 MySQL 中处理重复数据(Duplicate)的主要方式是使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句或 REPLACE INTO 语句。下面是这两种方法的详细解释: 一、INSERT ...

    MySQL 查询重复内容只显示一条

    标题“MySQL 查询重复内容只显示一条”涉及到的是在MySQL数据库中如何处理重复数据的问题。在数据分析或数据存储过程中,有时我们需要找出并处理重复的记录,只保留一条作为代表。这通常可以通过聚合函数和分组来...

    mysql自增字段重排 mysql删除表后自增字段从1开始.pdf

    理解这些知识点对于管理和维护MySQL数据库中的自增字段至关重要,可以帮助避免潜在的问题并优化数据存储效率。根据实际需求选择合适的存储引擎,以及正确处理自增字段的删除和初始化,能有效提升数据库的性能和管理...

    mysql 数据表中查找重复记录

    在MySQL数据库管理中,有时我们需要找出数据表中的重复记录,以确保数据的准确性和一致性。在给定的标题和描述中,我们关注的核心知识点是...以上提供的方法和技巧可以帮助你更有效地查找、分析和解决重复数据的问题。

    MySQL删除重复记录

    本文将深入探讨MySQL中删除重复记录的方法,以及如何利用其特性来优化数据管理流程。 ### MySQL删除重复记录 在MySQL中,重复记录可能由于各种原因而出现,比如数据导入错误、系统故障或人为操作失误等。这些重复...

    MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)

    本文主要探讨如何查询并删除MySQL中的重复数据,同时保留每个重复组中ID最小的一条记录。 首先,我们需要找到表中的重复数据。假设我们有一个名为`brand`的表,其中包含品牌名称`brandName`和其他字段,而我们想要...

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

    这一步的目的是为了后续删除`test`表中的重复数据: ```sql INSERT INTO bak SELECT * FROM test GROUP BY title HAVING COUNT(*) > 1; ``` 这段代码将那些在`test`表中`title`字段出现多次的记录加入到`bak`表中...

    mysql删除表中某一字段重复的记录

    在MySQL数据库管理中,删除表中某一字段重复的记录是一个常见的需求,特别是在数据清洗和优化数据库性能时。这里我们将深入探讨如何实现这个操作,并提供几种不同的解决方案。 首先,假设我们有一个名为`event`的表...

    经常面试到的SQL题(查询重复数据和清除重复数据)

    在SQL中,查询和清除重复数据是数据库管理中常见的任务,尤其在面试中,这个问题经常被用来测试候选人的技能和经验。以下是对这个主题的详细解释。 首先,我们需要理解什么是重复数据。在数据库中,重复数据指的是...

    数据库删除完全重复和部分关键字段重复的记录

    本文将详细介绍如何处理两种类型的重复记录:完全重复和部分关键字段重复的记录,并提供在MySQL、SQL Server和Oracle数据库环境下对应的解决方案。 **完全重复记录的处理** 完全重复记录指的是所有字段值都相同的...

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    本篇文章将详细介绍如何根据一个或多个字段查找重复数据的SQL语句。 首先,假设我们有一个名为`xi`的表,其中包含`id`和`username`两个字段。如果我们想要找出所有`username`重复的数据,可以使用以下SQL语句: ``...

    mysql查找删除表中重复数据方法总结

    本文将详细介绍如何在MySQL中查找并删除重复数据。 首先,我们需要识别哪些数据是重复的。假设我们有一个名为`my_table`的表,其中包含`column1`和`column2`等字段,可能存在重复数据。使用`GROUP BY`和`HAVING`...

    MySQL 删除数据库中重复数据方法小结

    在MySQL数据库管理中,删除重复数据是一个常见的需求,特别是在数据导入、同步或用户输入错误时。处理这种情况需要谨慎,以确保不会丢失重要信息。本文将详细介绍几种常见的删除重复数据的方法。 1. **基础方法:...

    谈MySQL中重复行的查找删除.pdf

    在MySQL数据库管理中,处理重复数据是一项常见的任务,特别是在关系型数据库中,数据的一致性和唯一性至关重要。本文主要探讨了在MySQL中如何查找并删除重复行,这对于维护数据库的整洁性和提高查询效率有着重要的...

    MySQL处理重复数据的方法

    这里,我们主要探讨如何防止和删除MySQL数据表中的重复数据。 首先,为了防止数据表出现重复数据,我们可以利用 PRIMARY KEY(主键) 或 UNIQUE(唯一) 索引来实现。主键是表中的一个或多个字段,其值在整个表中是...

    mysql查找删除重复数据并只保留一条实例详解

    本文将详细介绍如何在MySQL中查找并删除重复数据,同时只保留其中一条,具体以实例进行解析。 首先,假设我们有一个名为`test`的表格,包含以下字段:`school_id`、`school_name`、`total_student`和`test_takers`...

    MySQL中删除重复数据的简单方法

    在MySQL数据库管理中,删除重复数据是一个常见的需求,特别是在数据清洗和数据分析时。传统的删除重复数据的方法,如使用`NOT IN`或`DISTINCT`,可能会导致效率低下,特别是当处理大量数据时。本文将介绍一种高效的...

    mysql查询根据列按条件统计总数

    在MySQL中,经常需要对数据进行统计分析,特别是针对某一特定条件下的数据总量的统计。此类操作通常涉及到`COUNT()`函数与`GROUP BY`语句的结合使用,有时还需要与其他子查询或联合查询(`UNION`)相结合来完成更...

Global site tag (gtag.js) - Google Analytics