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

 更新时间:2008年05月08日 22:19:14   作者:  
重复记录分为两种,第一种是完全重复的记录,也就是所有字段均重复的记录,第二种是部分关键字段重复的记录,例如Name字段重复,而其它字段不一定重复或都重复。
1、第一种重复很容易解决,不同数据库环境下方法相似: 

以下为引用的内容:
Mysql 

create table tmp select distinct * from tableName; 

drop table tableName; 

create table tableName select * from tmp; 

drop table tmp; 


SQL Server 

select distinct * into #Tmp from tableName; 

drop table tableName; 

select * into tableName from #Tmp; 

drop table #Tmp; 

Oracle 

create table tmp as select distinct * from tableName; 

drop table tableName; 

create table tableName as select * from tmp; 

drop table tmp; 



发生这种重复的原因是由于表设计不周而产生的,增加唯一索引列就可以解决此问题。 

2、此类重复问题通常要求保留重复记录中的第一条记录,操作方法如下。 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集 

Mysql 

以下为引用的内容:
alter table tableName add autoID int auto_increment not null; 

create table tmp select min(autoID) as autoID from tableName group by Name,Address; 

create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID; 

drop table tableName; 

rename table tmp2 to tableName; 

SQL Server 

select identity(int,1,1) as autoID, * into #Tmp from tableName; 

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,Address; 

drop table tableName; 

select * into tableName from #Tmp where autoID in(select autoID from #Tmp2); 

drop table #Tmp; 

drop table #Tmp2; 

Oracle 

DELETE FROM tableName t1 WHERE t1.ROWID > (SELECT MIN(t2.ROWID) FROM tableName t2 WHERE t2.Name = t1.Name and t2.Address = t1.Address); 

 


说明: 

1. MySQL和SQL Server中最后一个select得到了Name,Address不重复的结果集(多了一个autoID字段,在大家实际写时可以写在select子句中省去此列) 

2. 因为MySQL和SQL Server没有提供rowid机制,所以需要通过一个autoID列来实现行的唯一性,而利用Oracle的rowid处理就方便多了。而且使用ROWID是最高效的删除重复记录方法。

相关文章

  • neo4j安装配置入门教程

    neo4j安装配置入门教程

    这篇文章主要为大家详细介绍了neo4j安装配置入门教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 如何查看Navicat加密的数据库密码

    如何查看Navicat加密的数据库密码

    本机装的MySQL数据库密码忘记了,打开了Navicat连接过数据库,不过密码是加密的,怎么办呢?今天小编给大家分享如何查看Navicat加密的数据库密码,感兴趣的朋友一起看看吧
    2023-04-04
  • sql join on 用法

    sql join on 用法

    非常不错使用join on实现数据库字段的连接输出效果。
    2009-07-07
  • 单机离线部署OceanBase3.1.5详解

    单机离线部署OceanBase3.1.5详解

    文章详细介绍了如何下载、安装和配置OceanBase数据库,包括配置OBD、修改配置文件、指定版本启动、修改limits.conf、部署安装、启动OceanBase、安装obclient、创建用户租户等步骤
    2024-11-11
  • SQL SERVER 里的错误处理(try catch)

    SQL SERVER 里的错误处理(try catch)

    SQL SERVER里,也有TRY CATCH。格式如下
    2009-02-02
  • Hadoop 2.x伪分布式环境搭建详细步骤

    Hadoop 2.x伪分布式环境搭建详细步骤

    这篇文章主要为大家详细介绍了Hadoop 2.x伪分布式环境搭建详细步骤,感兴趣的朋友可以参考一下
    2016-05-05
  • 大数据时代的数据库选择:SQL还是NoSQL?

    大数据时代的数据库选择:SQL还是NoSQL?

    执行大数据项目的企业面对的关键决策之一是使用哪个数据库,SQL还是NoSQL?SQL有着骄人的业绩,庞大的安装基础;而NoSQL正在获得可观的收益,且有很多支持者。我们来看看两位专家对这个问题的看法
    2014-03-03
  • GaussDB数据库使用COPY命令导入导出数据的场景分析

    GaussDB数据库使用COPY命令导入导出数据的场景分析

    使用COPY命令可以方便地导入数据到GaussDB,GaussDB还提供了其他数据导入工具和功能,如使用GDS导入数据、使用INSERT多行插入、使用gsql元命令导入数据、ETL工具集成等,以满足不同场景下的数据导入需求,对GaussDB COPY命令相关知识感兴趣的朋友一起看看吧
    2024-01-01
  • 最近关于Navicat到期的完美解决办法(亲测有效)

    最近关于Navicat到期的完美解决办法(亲测有效)

    这篇文章主要介绍了最近关于Navicat到期的完美解决办法(亲测有效),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • Sybase 复制与热切换数据

    Sybase 复制与热切换数据

    SYBASE复制服务器(Sybase Replication Server)用来满足日益发展的企业客户/服务器计算机环境的需要。自从复制服务器被广泛应用以来,已成为企业范围内客户/服务器应用模式的基础。
    2009-06-06

最新评论