如何删除db2中包含重复项的所有记录。我查看了各种答案,但他们只删除了重复项,从表中的那一组留下了一条记录。这是我发现的。
删除 (选择ROWNUMBER()超过(分一个,两个,三个)作为RN 来自SESSION.TEST)作为A 哪里有RN> 1;
但是,我需要一个查询,它将删除包含重复项的所有记录,而不会在表格中留下其中一个。
A A 1< - 删除此
A 2< - 删除这个
B B 3
C C 4
P.S:使用RN> = 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)