2015-01-21 143 views
0

如何刪除db2中的所有重複記錄。我已經看過各種答案,但他們只刪除表中的一組記錄中的一個記錄。這是我發現的。刪除db2中的所有重複記錄。 (不只是重複的記錄)

DELETE FROM (SELECT ROWNUMBER)OVER(PARTITION(被一個,兩個,三個)AS RN FROM SESSION.TEST),爲 WHERE RN> 1;

但是,我需要一個查詢,它將刪除所有包含重複項而不在表中留下其中一個的記錄。

AA 1 < - 刪除
AA 2 < - 刪除這也
BB 3
CC 4

PS:使用RN> = 1不起作用,因爲它會使表空通過刪除所有記錄。

回答

0

你原來的語句將不會在任何情況下工作 - 它只會後一行之後刪除任何(並給予你似乎在PARTITION BY列出的唯一ID列,而不是實際上應該刪除任何東西) 。

下應在LUW工作:

DELETE FROM (SELECT col1, col2, col3 
      FROM <tableName> ot 
      JOIN (SELECT col1, col2 
        FROM <tableName> 
        GROUP BY col1, col2 
        HAVING COUNT(*) > 1) dt 
       ON dt.col1 = ot.col1 
        AND dt.col2 = ot.col2) 

(雖然我沒有辦法來測試這一點)

我相信下面還應該工作,並接近通用(工作在大多數的RDBMS) :

DELETE FROM Temp 
WHERE (col1, col2) IN (SELECT col1, col2 
         FROM Temp 
         GROUP BY col1, col2 
         HAVING COUNT(*) > 1) 

SQL Fiddle Example