删除db2中包含重复项的所有记录。 (不只是重复的记录)

时间:2015-01-21 11:40:45

标签: db2 duplicates duplicate-removal delete-row

如何删除db2中包含重复项的所有记录。我查看了各种答案,但他们只删除了重复项,从表中的那一组留下了一条记录。这是我发现的。

删除     (选择ROWNUMBER()超过(分一个,两个,三个)作为RN      来自SESSION.TEST)作为A 哪里有RN> 1;

但是,我需要一个查询,它将删除包含重复项的所有记录,而不会在表格中留下其中一个。

A A 1< - 删除此
 A 2< - 删除这个  B B 3
 C C 4

P.S:使用RN> = 1不起作用,因为它会通过删除所有记录使表变空。

1 个答案:

答案 0 :(得分: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