当前位置: 首页 > 知识 >正文

oracle重复数据只取一条(oracle过滤重复数据)

在平时的开发中,我们经常会遇到数据表中出现重复数据的情况,那么如何解决呢?本文介绍了两种情况下的重复数据删除方法:一是完全重复数据删除;第二,一些字段数据是重复的。

第一,完全重复数据删除的方法

以下SQL语句可用于表中的完整重复数据删除。

Code

将表' # temp '创建为(从表名中选择distinct *);-创建一个临时表,并将不同重复数据删除后的数据插入临时表。

TruncateTABLE表名;-清空原始表格数据

INSERTINTO表名(SELECT * FROM ' # temp ');-将临时表数据插入到原始表中。

drop table“# temp”;-删除临时表

具体思路是先创建一个临时表,然后将DISTINCT后的表数据插入到这个临时表中;然后清除原始表格数据;然后将临时表中的数据插入到原始表中;最后,删除临时表。

第二,一些重复数据删除方法

首先找到重复的数据。

Select field 1, field 2, and count (*). Group by field 1 from table name, and field 2 has count (*) 1.

把上面的数字改成=就可以查到数据,不用重复。

想要删除这些重复的数据,可以使用下面的语句来删除:

Delete from table name A where field 1, field 2in.

(Select field 1, field 2, and count (*) is grouped by field 1 from table name, and field 2 has count (*) 1)

上面的语句很简单,就是删除查询到的数据。但是这种删除效率非常低,对于大量的数据,可能会卡数据库。

基于以上情况,可以先将找到的重复数据插入到一个临时表中,然后再删除,这样删除的时候就不需要重新查询了。如下所示:

Creating a table temporary table is like

(Select field 1, field 2, and count (*) is grouped by field 1 from table name, and field 2 has count (*) 1)

可以删除以下内容:

delete from table name a where field 1,field 2in(从临时表中选择field 1,field 2in

在删除之前创建一个临时表比用一条语句直接删除要高效得多。

上述语句将删除所有重复项。在oracle中,有一个自动隐藏的rowid,它给每个记录一个唯一的rowid。如果我们想保留最新的记录,我们可以使用这个字段。

只保留重复数据中rowid最大的记录。

以下是查询重复数据的示例:

selecta.rowid,a.*from表名a

wherea.rowid !=

(

selectmax(b.rowid)from表名b

在那里。字段1=B .字段1和

a.字段2=b.字段2

)

上面括号中的语句是查询出重复数据中rowid最大的一条记录。而外面就是查询出除了rowid最大之外的其他重复的数据了。

由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:

deletefrom表名a

wherea.rowid !=

(

selectmax(b.rowid)from表名b

wherea.字段1=b.字段1and

a.字段2=b.字段2

)

同理,上述代码的执行效率毕竟低,所以我们可以考虑建立临时表,将需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。

createtable临时表as

selecta.字段1,a.字段2,MAX(a.ROWID) dataidfrom正式表aGROUPBYa.字段1,a.字段2;

deletefrom表名a

wherea.rowid !=

(

selectb.dataidfrom临时表b

wherea.字段1=b.字段1and

a.字段2=b.字段2

);

commit;

相关文章:
  • 4月24日基金净值:兴全社会价值三年持有混合最新净值1.4553,跌0.9%
  • 5月4日基金净值:富国沪深300指数增强A最新净值1.541,涨0.33%
  • 5月26日基金净值:华宝券商ETF最新净值0.865,涨0.43%
  • 华泰柏瑞中证沪港深云计算产业ETF净值下跌3.20% 请保持关注
  • 7月11日基金净值:华商双擎领航混合最新净值0.6296,跌0.21%
  • 5月16日基金净值:南方成份精选混合A最新净值0.6682,跌0.4%
  • 4月17日基金净值:鹏华前海万科REITS最新净值101.965,涨0.2%
  • 7月3日基金净值:嘉实阿尔法优选混合A最新净值0.5954,涨0.8%
  • 招商中证疫苗与生物技术ETF净值下跌2.80% 请保持关注
  • 4月24日基金净值:南方中证长江保护主题ETF最新净值0.7548,跌0.59%