首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>mysql>正文

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

http://www.oklinux.cn  2008-05-06  赛迪网 Breton  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

重复记录分为两种,第一种是完全重复的记录,也就是所有字段均重复的记录,第二种是部分关键字段重复的记录,例如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是最高效的删除重复记录方法。


上一篇:Linux Kernel Tehuti网络驱动内存破坏漏洞   下一篇:为OpenOffice.org安装3D转换效果的插件

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·数据库索引的优缺点及使用时的注意事项
·由浅入深讲解MySQL数据库索引的选择性
·MySQL性能调整之my.cnf文件的配置方法
·循序渐进讲解MySQL数据库的性能调整
·Linux服务器上安装MySQL版本冲突问题的解决
·使用实例管理器轻松管理多个MySQL实例
·带你轻松接触MySQL数据库的异常处理
·讲解MySQL索引的概念及数据库索引的应用
·Replace INTO与INSERT INTO的不同之处
·详细讲解Linux环境下 MySQL5.1安装步骤
·MySQL安装后时服务不能启动的解决
·Linux环境MySQL的C编程起步
·Linux操作系统下MySQL的查看
·Ubuntu8.04正式版上安装配置MySQL
·Linux下修复损坏的MySQL数据库
·MySQL数据库常见的出错代码及出错信息
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·业界担忧MySQL命悬一线
·Fedora下通过rpm命令安装MySQL
·在Centos 5.2下安装最新的MySQL Proxy
·phpMyAdmin 3.0最简单的配置方法
·MySQL乱码问题深层分析
·Linux iptables下开放MySQL端口
·MySQL不支持GBK编码的解决方法
·把 MySQL 从 Windows 上移植到 Linux
·Fedora 10成功安装Oracle 10g
·MySQL加入复制replication服务器
·Ubuntu MySQL下JAVA开发中乱码问题的解
·怎样在线配置phpMyAdmin
  阅读排行
·详细讲解如何导入和导出MySQL数据库
·新手进阶 Python连接MySQL代码
·Linux 安装 Mysql
·MySQL出现ERROR 10061错误的解决一例
·MySQL TEXT、DATE、SET 数据类型
·在Linux系统环境下修改MySQL的root密码
·SQL语法详解
·MySQL出现1045错误服务找不到路径的解
·如何在Linux系统中安装MySQL
·在Linux 环境下安装 Mysql
·Fedora 10成功安装Oracle 10g
·Ubuntu下MySQL的手工安装
·在MySQL数据库增加新用户权限简介
·MySQL教學課程
·在Linux上安装MySQL Server 5.0
网摘收藏: