2012-08-24 46 views
0

可能重複刪除行:
Removing duplicate rows from table in Oracle其中一定值時,發生不止一次SQL

這裏是什麼,我現在有一個例子:

ID  Name1 Name2 
ABC123 Bob  Jones 
ABC123 Bob  Smith 
ABC123 Bob  Hammond 
DEF234 Tim  Whatever 

我會像上面的表格看起來像這樣:

ID  Name1 Name2 
ABC123 Bob  Jones 
DEF234 Tim  Whatever 

我想刪除共享ID字段的所有行,我不在乎保留或刪除哪些行,只是總行數等於唯一ID的數量。

+0

你允許使用PL/SQL? – Reimius

+0

@Reimius,是PL/SQL是一個選項。 – solr

回答

3
DELETE FROM YOURTABLE Y WHERE ROWID > (SELECT min(rowid) FROM YOURTABLE X 
WHERE X.ID = Y.ID) 
+0

X和Y代表什麼? – solr

+0

他們是餐桌別名。例如,當您編寫YOUTABLE X時,您可以在該查詢中使用X而不是YOURTABLE。因此,它們代表YOURTABLE,或者表格的任何名稱。您不必使用X或Y,可以使用任何字符或單詞(Oracle中的保留字除外)。 – bonsvr

+0

我現在看到了,那就是訣竅。謝謝bonsvr! – solr

0

如果你沒有出於任何原因的全球唯一的ID,那麼這樣的事情應該工作:

DELETE FROM Table WHERE CONCAT(ID,Name1,Name2) NOT IN ( 
     SELECT MIN(CONCAT(ID,Name1,Name2)) FROM Table GROUP BY ID) 
0
DELETE FROM your_table 
     WHERE ROWID IN (
       SELECT rid 
        FROM (SELECT ROWID rid, 
          ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ROWID) rn 
         FROM your_table) 
       WHERE rn <> 1); 
+0

@ J.Chomel我不明白你提出的建議嗎?我只是根據我的示例 –

+0

中的ID列進行分組,對不起,張貼在錯誤的頁面上。 –