2011-10-31 119 views
0

我在Oracle中有一个观点,nat_gas_readings_view,我发现一些重复的东西从不知不觉中弹出。几个月来,直到过去一周才有重复的迹象。以下是我从我的观点收集的一些示例数据。我想编写一个查询来删除这些重复项。如果可能的话,任何人都可以解释这是怎么发生的,并帮助我创建一个查询来从视图中删除重复项。谢谢。如何在oracle中删除表/视图中的重复记录?

DATETIMESTAMP     BOF   EAF    LEVY   SHOP 

10/31/2011 13:00:01  3564729  933776   12459  307 
10/31/2011 13:00:01  3564729  933776  12459  307 
10/31/2011 12:00:08  3563079  933446   12459  307 
10/31/2011 12:00:08  3563079  933446  12459  307 
10/31/2011 11:00:09  3561659  933121  12459  307 
10/31/2011 11:00:09  3561659  933121  12459  307 
10/31/2011 10:00:10  3560636  932802  12458  307 
10/31/2011 09:00:08  3559548   932481  12450  307 
10/31/2011 09:00:08  3559548  932481  12450  307 
+0

你可以发布视图吗? –

+1

@丹特如果你有没有重复的地方,那么你就会遇到更大的问题,而不是简单地找出如何去除它们。我建议您彻底分析您的数据模型,并查看是否缺少任何密钥。 –

回答

1

如果你需要看,首先创建该视图的查询,可在基础查询中的数据不会被复制或者有更多的领域,使得它不重复一个观点。

摆脱喧闹的一种方法是在视图中添加DISTINCT来改变视图中的查询。

我会通过检查或创建唯一的密钥来消除重复输入。删除的DUP

+0

独特似乎有所帮助 –

0

最简单方法是可能使用的rowid,如:

delete from nat_gas_readings ng1 
where rowid <> (select max (rowid) from nat_gas_readings ng2 
where ng1.datetimestamp = ng2.datetimestamp 
and ng1.bof = ng2.bof 
and ng1.eaf = ng2.eaf 
and ng1.levy = ng2.levy 
and ng1.shop = ng2.shop) 

但是视图不会有一个rowid。请张贴您的视图定义 - 也许这是创造dups!如果视图def是可以的,那么也许使用上面的rowid从底层表中删除dups。最好应用一个独特的约束来确保将来不会发生这种情况。