当前位置: 首页 > 图文教程 > 数据库 > Oracle > 使用一条SQL语句删除表中重复记录

Oracle
Excel VBA连接并操作Oracle
Oracle 外连接实现代码
oracle 存储过程和函数例子
Oracle 数据库操作类
ORACLE 分区表的设计
Oracle 用户权限管理方法
Oracle In和exists not in和not exists的比较分析
利用windows任务计划实现oracle的定期备份
ORACLE11g随RHEL5系统自动启动与关闭的设置方法
在oracle 数据库查询的select 查询字段中关联其他表的方法
plsql和tsql常用函数比对
plsql与tsql的语法不同
ASP.NET调用oracle存储过程实现快速分页
执行drop表操作后数据库无法起动
分析Oracle有时会用索引来查找数据的原因
数据从MySQL迁移到 Oracle的注意事项
快速理解Oracle归档模式的命令及参数
在Oracle里加快SQL执行的三种方法
几条常见的数据库分页 SQL 语句
Oracle9I OCP认证过程

Oracle 中的 使用一条SQL语句删除表中重复记录


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 97 ::
收藏到网摘: n/a

数据库结构的脚本:


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TempA]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TempA]
GO

CREATE TABLE [dbo].[TempA] (
 [id] [int] IDENTITY (1, 1) NOT NULL ,
 [PositionName] [varchar] (256) COLLATE Chinese_PRC_CI_AS NULL ,
 [EnglishPositionName] [varchar] (256) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TempA] ADD
 CONSTRAINT [PK_TempA] PRIMARY KEY  CLUSTERED
 (
  [id]
 )  ON [PRIMARY]
GO



TempA表中有三个字段,id唯一且为主键,自动增长; PositionName,EnglishPositionName中有重复的记录,比如:
id      PositionName        EnglishPositionName
20     其他                           Others
21     质量工程师               QC Engineer
22     其他                           Others
.......
100  质量工程师               QC Engineer
需要剔除重复的"其他","质量工程师"等记录。

采用的SQL语句:
Delete from TempA where id not in (
        select max(t1.id) from TempA t1 group by
         t1.PositionName,t1.EnglishPositionName)

说明:
(1)需要剔除那几个用于判断重复的字段,则将它们放在group by语句之后。
(2)max(t1.id) 也可以改成:min(t1.id)