`
小牛犊
  • 浏览: 97004 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

sql删除重复记录

    博客分类:
  • SQL
阅读更多

学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录。后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录;还可以建临时表来实现...这个只提到其中的几种简单实用的方法,希望可以和大家分享(以表employee为例)。

 

SQL> desc employee

 

 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------

 

emp_id                                                NUMBER(10)
emp_name                                           VARCHAR2(20)

 

salary                                                  NUMBER(10,2)

 

 

 

 

 

可以通过下面的语句查询重复的记录:

 

 

 

SQL> select * from employee;

 

 

 

    EMP_ID EMP_NAME                                  SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         1 sunshine                                      10000

 

         2 semon                                         20000

 

         2 semon                                         20000

 

         3 xyz                                           30000

 

         2 semon                                         20000

 

 

 


SQL>
select distinct * from employee;

 

    EMP_ID EMP_NAME                                     SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         2 semon                                         20000

 

         3 xyz                                             30000

 

SQL>  select * from employee group by emp_id,emp_name,salary having count (*)>1

 

    EMP_ID EMP_NAME                                     SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         2 semon                                          20000

 


SQL>
select * from employee e1

 

where rowid in (select max(rowid) from employe e2
 
where e1.emp_id=e2.emp_id and

 

  e1.emp_name=e2.emp_name and e1.salary=e2.salary);

 

 

 

    EMP_ID EMP_NAME                                     SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         3 xyz                                             30000

 

         2 semon                                         20000

 

 

 

 

 

2. 删除的几种方法:

 

 

 

 

 

1)通过建立临时表来实现

 

 

 

SQL>create table temp_emp as (select distinct * from employee) 

 

SQL> truncate table employee; (清空employee表的数据)

 

 

 

SQL> insert into employee select * from temp_emp;  (再将临时表里的内容插回来)

 

 

 

 

 

( 2)通过唯一rowid实现删除重复记录.Oracle中,每一条记录都有一个rowidrowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大或最小rowid的就可以了,其余全部删除。

 

 

 

SQL>delete from employee e2 where rowid not in (
       
select max(e1.rowid) from employee e1 where

 

        e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--这里用min(rowid)也可以。

 

 

 

 

 

SQL>delete from employee e2 where rowid <(
       
select max(e1.rowid) from employee e1 where
        e1.emp_id
=e2.emp_id and e1.emp_name=e2.emp_name and

 

                  e1.salary=e2.salary);

 

 

 

3)也是通过rowid,但效率更高。

 

 

 

SQL>delete from employee where rowid not in (
       
select max(t1.rowid) from employee t1 group by

 

         t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。

 

 

 

 

 

 

 

    EMP_ID EMP_NAME                                     SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         3 xyz                                             30000

 

         2 semon                                         20000

 

 

 

SQL> desc employee

 

 Name                                      Null?    Type
 ----------------------------------------- -------- ------------------

 

emp_id                                                NUMBER(10)
emp_name                                           VARCHAR2(20)

 

salary                                                  NUMBER(10,2)

 

 

 

 

 

可以通过下面的语句查询重复的记录:

 

 

 

SQL> select * from employee;

 

 

 

    EMP_ID EMP_NAME                                  SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         1 sunshine                                      10000

 

         2 semon                                         20000

 

         2 semon                                         20000

 

         3 xyz                                           30000

 

         2 semon                                         20000

 

 

 


SQL>
select distinct * from employee;

 

    EMP_ID EMP_NAME                                     SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         2 semon                                         20000

 

         3 xyz                                             30000

 

SQL>  select * from employee group by emp_id,emp_name,salary having count (*)>1

 

    EMP_ID EMP_NAME                                     SALARY

 

---------- ---------------------------------------- ----------

 

         1 sunshine                                      10000

 

         2 semon                                          20000

 


SQL>
select * from employee e1

 

where rowid in (select max(rowid) from employe e2
 
where e1.emp_id=e2.emp_id and

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

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

    以上介绍了多种使用SQL删除重复记录的方法,每种方法都有其适用场景和特点。在选择具体方法时,需要考虑数据库的类型、数据量大小以及性能要求等因素。通过合理选择合适的方法,可以有效提高数据清理的效率和准确性...

    SQL删除重复记录的方法

    在SQL中,删除重复记录是一项常见的数据库管理任务,特别是在数据清洗和整理时。本文将详细介绍四种有效的方法来处理这个问题。 **方法1:使用临时表** 这种方法通过创建临时表temp1来存储重复记录,并最终将不重复...

    四种SQL语句删除重复记录的方法

    ### 四种SQL语句删除重复记录的方法 在数据库管理中,经常会出现数据冗余的情况,特别是当数据量庞大时,这种现象更为普遍。对于重复记录的处理是维护数据库完整性和提高查询效率的重要手段之一。本文将详细介绍四...

    删除数据表中重复记录

    #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录从数据表中移除。通常的做法包括: 1. **识别重复记录**:通过`GROUP BY`和`HAVING`子句找出...

    SQL语句删除重复记录

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

    SQL删除重复行

    2. **删除重复记录**:保留每个`peopleId`的最小`rowid`,删除其他重复的行: ```sql DELETE FROM people WHERE peopleId IN ( SELECT peopleId FROM people GROUP BY peopleId HAVING COUNT(peopleId) &gt; 1 ) ...

    sql查询重复记录方法大全

    - `rowid`用于唯一标识每条记录,从而能够更准确地删除重复记录。 #### 方法八:处理具有多个重复字段的记录 **SQL语句**: ```sql SELECT DISTINCT * INTO #Tmp FROM tableName; DROP TABLE tableName; SELECT * ...

    在SQL中删除重复记录(多种方法).

    在SQL中删除重复记录(多种方法).有兴趣的可以下载

    sql查询重复记录语句

    删除重复记录是数据清理的重要步骤,以下是一种通用的删除所有重复记录的方法: ```sql DELETE FROM tableName WHERE colName IN (SELECT colName FROM tableName GROUP BY colName HAVING COUNT(*) &gt; 1); ``` ...

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

    删除重复记录时,通常保留一个代表性的记录,例如保留 `ROWID` 最小的记录。可以使用以下 SQL 语句: ```sql DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) &gt; 1) AND ...

    sqlServer删除重复数据

    SQL Server 删除重复数据 SQL Server 删除重复数据是数据库管理中的一项重要任务。重复数据可能是完全重复的记录,也可能是部分关键字段重复...删除重复数据需要根据实际情况选择合适的方法,才能正确地删除重复记录。

    删除表中重复数据sql语句

    以上SQL语句能够帮助我们删除除了具有最小ROWID之外的所有重复记录。 3. **查找表中多余的重复记录(不含最小ROWID)** ```sql SELECT * FROM vita_ea WHERE (a.peopleId, a.seq) IN ( SELECT peopleId, seq ...

    sql删除表中重复记录方法

    这种方法通过创建两个临时表来辅助删除重复记录的过程。首先,通过`GROUP BY`和`COUNT(*)`函数找出重复的记录,并将这些记录的ID存储到临时表`temp1`中。接着,将不重复的记录也插入到`temp1`中。之后,创建一个新的...

    轻松消除SQL SERVER重复记录

    在SQL Server中,处理重复...总之,通过创建临时表、添加唯一索引、复制数据以及更新原表,可以有效地在SQL Server中删除重复记录,而无需使用游标,提高了处理效率。这种方法尤其适用于处理大型表,且易于理解和实现。

    SQL删除重复列

    ### SQL删除重复列知识点详解 在数据库管理与维护过程中,数据清洗是一项非常重要的工作,而删除重复记录(或称为去重)是数据清洗中的常见需求之一。本文将围绕“SQL删除重复列”的主题,深入探讨如何有效地利用...

    在SQL中删除重复记录多种方法

    在SQL中删除重复记录是一个常见的需求,特别是在处理大型数据集时。本文将介绍几种有效的方法,以帮助你在遇到重复记录问题时能有效地清理数据。我们将以Oracle数据库为例,但这些方法在其他SQL数据库系统中也具有...

    SQL语句查询重复记录大全

    删除重复记录的基本方法 - **基本思路**:通常的做法是先找出重复记录,然后使用`DELETE`语句删除它们。 - **SQL示例**: ```sql DELETE FROM people WHERE peopleId IN ( SELECT peopleId FROM people GROUP...

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

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

    plsql删除重复记录

    在开始删除重复记录之前,首先需要确定哪些记录是重复的。以下SQL语句可以用来查询`test`表中所有字段都重复的记录: ```sql SELECT * FROM test GROUP BY name, age, sex, id, sf HAVING COUNT(*) &gt; 1; ``` 这里...

Global site tag (gtag.js) - Google Analytics