2011-10-31 128 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。最好應用一個獨特的約束來確保將來不會發生這種情況。