C列也要考虑对么?
目前成都创新互联已为数千家的企业提供了网站建设、域名、网页空间、网站运营、企业网站设计、沂源网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
delete from table x
where not exists (select 1 from (select a,b,max(c) c from table group by a,b ) y
where x.a=y.a and x.b=y.b and x.c=y.c);
随机删除重复列:
delete from table x
where exists(select 1 from (select a, b, max(rowid) max_rowid from table group by a, b) y
where x.a=y.a and x.b=y.b and x.rowid y.max_rowid);
方法很多:
新建临时表,将原始数据使用distinct或者分组之后,生成独立数据到临时表中。清空原始表,将临时表导入原始表。
创建动态游标,找到所有重复数据,重复执行删除,直到重复数据删除完毕。
以上方法仅供参考。
1。用rowid方法
据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:
查数据:
select * from table1 a where rowid
!=(select max(rowid)
from table1 b where a.name1=b.name1 and
a.name2=b.name2......)
删数据:
delete from table1 a where rowid
!=(select max(rowid)
from table1 b where a.name1=b.name1 and
a.name2=b.name2......)
2.group by方法
查数据:
select count(num), max(name) from student --列出重复的记录数,并列出他的name属性
group by num
having count(num) 1 --按num分组后找出表中num列重复,即出现次数大于一次
删数据:
delete from student
group by num
having count(num) 1
这样的话就把所有重复的都删除了。
3.用distinct方法 -对于小的表比较有用
create table table_new as select distinct *
from table1 minux
truncate table table1;
insert into table1 select * from table_new;
select testid,count(1) from testtable group by testid having count(1)1
count(1)就是重复在数量
如何查询重复的数据
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) 1
PS:将上面的号改为=号就可以查询出没有重复的数据了。
Oracle删除重复数据的SQL(删除所有):
删除重复数据的基本结构写法:
想要删除这些重复的数据,可以使用下面语句进行删除
delete from 表名 a where 字段1,字段2 in(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) 1)
上面的SQL注意:语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。
建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:
CREATE TABLE 临时表 AS (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) 1)
上面这句话就是建立了临时表,并将查询到的数据插入其中。
下面就可以进行这样的删除操作了:
delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);
Oracle数据库重复的数据一般有两种去重方法,一、完全重复数据去重;二、部分字段数据重复去重。
一、完全重复数据去重方法
对于表中完全重复数据去重,可以采用以下SQL语句。
Code
CREATETABLE"#temp"AS (SELECTDISTINCT * FROM 表名);--创建临时表,并把DISTINCT 去重后的数据插入到临时表中
truncateTABLE 表名;--清空原表数据
INSERTINTO 表名(SELECT * FROM"#temp");--将临时表数据插入到原表中
DROPTABLE"#temp";--删除临时表
具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表。
二、部分数据去重方法
首先查找重复数据
select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) 1
将上面的号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用下面语句进行删除:
deletefrom 表名 a where 字段1,字段2 in
(select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) 1)
oracle产品服务
甲骨文公司产品主要有以下几类:
甲骨文股份有限公司
1.服务器及工具
数据库服务器:2013年最新版本Oracle 12C。
应用服务器:Oracle Application Server。
开发工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。
2.企业应用软件
企业资源计划(ERP)软件。已有10年以上的历史。2005年,并购了开发企业软件的仁科软件公司(PeopleSoft)以增强在这方面的竞争力。
客户关系管理(CRM)软件。自1998年开始研发这种软件。2005年,并购了开发客户关系管理软件的希柏软件公司(Siebel)。
3. Oracle职业发展力计划(Oracle WDP)
Oracle WDP 全称为Oracle Workforce Development Program,是Oracle (甲骨文)公司专门面向学生、个人、在职人员等群体开设的职业发展力课程。Oracle的技术广泛应用于各行各业,其中电信、电力、金融、政府及大量制造业都需要Oracle技术人才,Oracle公司针对职业教育市场在全球推广的项目,其以低廉的成本给这部分人群提供Oracle技术培训,经过系统化的实训,让这部分人群能够迅速掌握Oracle最新的核心技术,并能胜任企业大型数据库管理、维护、开发工作。
我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢? 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。 一、对于部分字段重复数据的删除 先来谈谈如何查询重复的数据吧。 下面语句可以查询出那些数据是重复的: select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) 1 将上面的号改为=号就可以查询出没有重复的数据了。 想要删除这些重复的数据,可以使用下面语句进行删除 delete from 表名 a where 字段1,字段2 in(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) 1) 上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下: CREATE TABLE 临时表 AS(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) 1) 上面这句话就是建立了临时表,并将查询到的数据插入其中。 下面就可以进行这样的删除操作了: delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表); 这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。 这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。