2015-01-21 141 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