2012-07-30 57 views
0

應該在oracle中刪除重複的行不是下面的查詢做工精細刪除重複的行中的Oracle

SQL> delete from sessions o 
     where 1<=(select count(*) 
        from sessions i 
       where i.id!=o.id 
        and o.data=i.data); 

這似乎刪除所有重複行! (我希望保持1強硬)

+0

可能重複的[在Oracle中刪除表中的重複行](http://stackoverflow.com/questions/529098/removing-duplicate-rows-from-table-in-oracle) – Ollie 2012-07-30 15:38:42

+0

感謝您的解決方案,但爲什麼這dosent似乎工作正常? – Akash 2012-07-30 15:41:21

回答

2

您的聲明不起作用,因爲您的表至少有一行,其中兩個不同的ID共享DATA的相同值。

雖然你意圖可能是尋找由ID,你的SQL是什麼實際上是在設置基於不同的DATAID值:「看看我的表作爲一個整體。如果有任何行在表中這樣的DATA是相同的但ID的不同(即,內部COUNT(*)是大於0的任何東西),然後DELETE表中的每一行。

您可能正在嘗試特定的基於行的邏輯,但您的語句是大圖片(基於集合)。沒有什麼能夠找出重複的行,例如,在Ollie解決方案中有鏈接。