建表语句
CREATE TABLE Persons
(
PersonID int,           
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

insert into Persons values(1,'a','aa','aaa','aaaa');
insert into Persons values(1,'a','aa','aaa','aaaa');
insert into Persons values(1,'a','aa','aaa','aaaa');
insert into Persons values(1,'a','aa','aaa','aaaa');
insert into Persons values(2,'a','aa','aaa','aaaa');
insert into Persons values(2,'a','aa','aaa','aaaa');
insert into Persons values(3,'a','aa','aaa','aaaa');
insert into Persons values(3,'a','aa','aaa','aaaa');
insert into Persons values(4,'a','aa','aaa','aaaa');
insert into Persons values(5,'a','aa','aaa','aaaa');

select * from Persons order by PersonID;
    PERSONID    LASTNAME    FIRSTNAME    ADDRESS      CITY
1    1          a        aa          aaa      aaaa
2    1          a        aa          aaa      aaaa
3    1          a        aa          aaa      aaaa
4    1          a        aa          aaa      aaaa
5    2          a        aa          aaa      aaaa
6    2          a        aa          aaa      aaaa
7    3          a        aa          aaa      aaaa
8    3          a        aa          aaa      aaaa
9    4          a        aa          aaa      aaaa
10    5          a        aa          aaa      aaaa

1、查找表中多余的重复记录,重复记录是根据单个字段(PersonID)来判断。
select * from Persons where PersonID in ( select PersonID from Persons group by PersonID having(count(PersonID))>1);
order by PersonID;

PERSONID    LASTNAME    FIRSTNAME    ADDRESS    CITY
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
2    a    aa    aaa    aaaa
2    a    aa    aaa    aaaa
3    a    aa    aaa    aaaa
3    a    aa    aaa    aaaa

2、删除表中多余的重复记录,重复记录是根据单个字段(PersonID)来判断,只留有rowid最小的记录。
select * from Persons
where PersonID  in (select  PersonID  from Persons  group  by  PersonID   having  count(PersonID) > 1)
and rowid not in (select min(rowid) from  Persons  group by PersonID  having count(PersonID )>1)
order by PersonID;

delete from Persons
where PersonID  in (select  PersonID  from Persons  group  by  PersonID   having  count(PersonID) > 1)
and rowid not in (select min(rowid) from  Persons  group by PersonID  having count(PersonID )>1)

PERSONID    LASTNAME    FIRSTNAME    ADDRESS    CITY
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
2    a    aa    aaa    aaaa
3    a    aa    aaa    aaaa

3、查找表中多余的重复记录(多个字段)
select * from Persons a
where (a.PersonID,a.City) in  (select PersonID,City from Persons group by PersonID,City  having count(*) > 1)
order by PersonID;

PERSONID    LASTNAME    FIRSTNAME    ADDRESS    CITY
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
2    a    aa    aaa    aaaa
2    a    aa    aaa    aaaa
3    a    aa    aaa    aaaa
3    a    aa    aaa    aaaa

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
select * from Persons a
where (a.PersonID,a.City) in  (select PersonID,City from Persons group by PersonID,City having count(*) > 1)
and rowid not in (select min(rowid) from Persons group by PersonID,City having count(*)>1)
order by PersonID;

delete from Persons a
where (a.PersonID,a.City) in  (select PersonID,City from Persons group by PersonID,City having count(*) > 1)
and rowid not in (select min(rowid) from Persons group by PersonID,City having count(*)>1)

PERSONID    LASTNAME    FIRSTNAME    ADDRESS    CITY
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
2    a    aa    aaa    aaaa
3    a    aa    aaa    aaaa

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from Persons a
where (a.PersonID,a.City) in  (select PersonID,City from Persons group by PersonID,City having count(*) > 1)
and rowid not in (select min(rowid) from Persons group by PersonID,City having count(*)>1)
and rowid not in (select min(rowid) from Persons group by PersonID,seq having count(*)>1)
order by PersonID;

PERSONID    LASTNAME    FIRSTNAME    ADDRESS    CITY
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
1    a    aa    aaa    aaaa
2    a    aa    aaa    aaaa
3    a    aa    aaa    aaaa

oracel 查询删除重复记录的几种方法的更多相关文章

  1. oracle中查找和删除重复记录的几种方法总结

    平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...

  2. spring+hibernate删除单条记录的几种方法

    spring+hibernate删除单条记录的几种方法

  3. ORACLE查询删除重复记录三种方法

    本文列举了3种删除重复记录的方法,分别是rowid.group by和distinct,小伙伴们可以参考一下.   比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完 ...

  4. ORACLE查询删除重复记录

     比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 复制代码 代码如下: select p1.*   from persons  p1,pers ...

  5. Oracle中查询和删除相同记录的3种方法

    --创建测试表 )); ,'); ,'); ,'); ,'); ,'); ,'); commit; select * from test; --查询相同记录 ); select id,name fro ...

  6. SQL Server 数据库查找重复记录的几种方法

    http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...

  7. python列表删除重复元素的三种方法

    给定一个列表,要求删除列表中重复元素. listA = ['python','语','言','是','一','门','动','态','语','言'] 方法1,对列表调用排序,从末尾依次比较相邻两个元素 ...

  8. 在MS SQL删除重复行的几种方法

    1.如果有ID字段,就是具有唯一性的字段         delect   table   where   id   not   in   (             select   max(id) ...

  9. Oracle 删除重复数据的几种方法

    去重 第一种:distinct create table tmp_t3 as select distinct * from t3; drop table t3; alter table tmp_t2 ...

随机推荐

  1. sql server2008升级

    安装了试用版的sql server2008,要升级为正式企业版.仅仅须要使用安装程序的 维护-升级 功能.在升级时输入企业版序列号,就能升级为正式版.以下给两个序列号 开发版: PTTFM-X467G ...

  2. springboot中 简单的SpringMvc全局异常处理

    1.全局异常处理类:GlobalExceptionHandler.java package com.lf.exception; import java.util.HashMap; import jav ...

  3. c++中重载,重写,覆盖

    1.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列表(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 相同的范围(在 ...

  4. traits与Iterator

    traits 这是用traits的详细用法https://www.cnblogs.com/tianzeng/p/9709814.html /** * 用于标记迭代器类型 */ struct input ...

  5. 利用 netsh 给 mysql 开启多端口监听

    利用 netsh 给 mysql 开启多端口监听 标题党,实际并不是真的多端口监听,只是端口转发而已. 由于某种特殊原因需要 mysql 服务器多个端口监听. mysql 服务器本身是不支持的,但可以 ...

  6. new与malloc的区别,以及内存分配浅析

      从函数声明上可以看出.malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小.比如: 1 2 3 int *p; p = new int; //返回类型 ...

  7. java代码----I/O流写出整型,浮点型,

    总结: package com.a.b; import java.io.*; public class fdsf { public static void main(String[] args) th ...

  8. Hive使用druid做连接池代码实现

    配置文档 hive_jdbc_url=jdbc:hive2://192.168.0.22:10000/default hive.dbname=xxxxx hive_jdbc_username=root ...

  9. python学习(二十七) 元组

    # 元组是不可变的,不能改变元素的值,也不能增加.减少元素my_tuple = (1, 2, 3, 3)print(my_tuple) # 查找元素位置print(my_tuple.index(2)) ...

  10. OSPF理论介绍

    OSPF协议Open Shortest Path First是链路状态协议.RIP和EIGRP是距离矢量协议只知道邻居,但链路状态可知道全网信息,因此天然免疫环路.距离矢量协议和链路状态协议最大的区别 ...