oracel 查询删除重复记录的几种方法
建表语句
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 查询删除重复记录的几种方法的更多相关文章
- oracle中查找和删除重复记录的几种方法总结
平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...
- spring+hibernate删除单条记录的几种方法
spring+hibernate删除单条记录的几种方法
- ORACLE查询删除重复记录三种方法
本文列举了3种删除重复记录的方法,分别是rowid.group by和distinct,小伙伴们可以参考一下. 比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完 ...
- ORACLE查询删除重复记录
比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 复制代码 代码如下: select p1.* from persons p1,pers ...
- Oracle中查询和删除相同记录的3种方法
--创建测试表 )); ,'); ,'); ,'); ,'); ,'); ,'); commit; select * from test; --查询相同记录 ); select id,name fro ...
- SQL Server 数据库查找重复记录的几种方法
http://www.hanyu123.cn/html/c61/6790.html 一.查某一列(或多列)的重复值.(只可以查出重复记录的值,不能查出整个记录的信息) 例如:查找stuid,stuna ...
- python列表删除重复元素的三种方法
给定一个列表,要求删除列表中重复元素. listA = ['python','语','言','是','一','门','动','态','语','言'] 方法1,对列表调用排序,从末尾依次比较相邻两个元素 ...
- 在MS SQL删除重复行的几种方法
1.如果有ID字段,就是具有唯一性的字段 delect table where id not in ( select max(id) ...
- Oracle 删除重复数据的几种方法
去重 第一种:distinct create table tmp_t3 as select distinct * from t3; drop table t3; alter table tmp_t2 ...
随机推荐
- php基础语法(变量)
PHP常用表现形式: 1.<?php .....这里是php代码 ?> 2.<? .....这里是php代码 ?> 此形式依赖于php.ini中的一项设置: short_ope ...
- IDEA使用介绍
https://blog.csdn.net/qq_27093465/article/details/77449117
- flannel vxlan 实现原理【转】
flannel是coreos为kubernets提供的网络解决方案,主要为打通跨节点的容器通信,其中vxlan模式为flannel实现的一种后端模式,其他模式还包括udp, host-gw等,可以通过 ...
- 【转】电信100M光纤无线下载速度仅为5MB/秒的困惑
原文网址:http://itbbs.pconline.com.cn/50463999.html 在江苏电信官方测速网站测速的.1.光猫F460有线连接至笔记本,下载速度为12MB/秒左右:2.F460 ...
- Markdown初步使用
一.兼容 HTML Markdown 的理念是,能让文档更容易读.写和随意改.HTML 是一种发布的格式,Markdown 是一种书写的格式.就这样,Markdown 的格式语法只涵盖纯文本可以涵盖的 ...
- GOF23设计模式之迭代器模式(iterator)
一.迭代器模式概述 提供一种可以遍历聚合对象的方式.又称为:游标(cursor)模式 结构: (1)聚合对象:存储数据 (2)迭代器:遍历数据 二.迭代器模式示例代码 定义:正向遍历迭代器和逆向遍历迭 ...
- 用活firewalld防火墙中的zone
原文地址:http://www.excelib.com/article/290/show firewalld中zone的含义学生前面已经给大家介绍过了,说白了一个zone就是一套规则集.可是什么时候该 ...
- 详细讲解删除SQL Server日志的具体方法
一: 删除LOG 1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库 2:删除LOG文件 3:附加数据库 企业管理器->服务器->数据库-> ...
- Gradle: Can't load library: native-platform.dll
Eclipse 导入 Gradle project 时总是报错:Can't load library: native-platform.dll. 解决方案: 进入 Windows -> Pref ...
- 015:索引、B+树
一. 索引 1. 索引的定义 索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单.索引的作用 ...