Firebird 2.5删除具有重复字段的行

时间:2013-07-31 07:41:48

标签: firebird

我正在尝试删除重复的值,这些值由于某种原因导入到特定的表中。 此表中没有主键。 共有27797条独特记录。

Select distinct txdate, plunumber from itemaudit

给我正确的记录,但当然只显示txdate,笨蛋。

如果可以选择所有字段但只选择txdate的不同,那么我可以导出值,删除重复的值并重新导入。 或者,如果可以从整个表中删除不同的值。

如果选择所有字段的不同,则该值不正确。

2 个答案:

答案 0 :(得分:3)

要获取有关重复项的所有信息,您只需使用JOIN查询重复行的所有信息:

SELECT b.*
FROM (SELECT COUNT(*) as cnt, txdate, plunumber 
      FROM itemaudit 
      GROUP BY txdate, plunumber 
      HAVING COUNT(*) > 1) a
INNER JOIN itemaudit b ON a.txdate = b.txdate AND a.plunumber = b.plunumber

答案 1 :(得分:0)

DELETE FROM itemaudit t1
WHERE EXISTS (
SELECT 1 FROM itemaudit t2
WHERE t1.txdate = t2.txdate and t1.plunumber = t2.plunumber 
AND t1.RDB$DB_KEY < t2.RDB$DB_KEY
);