识别相似的行并删除具有不同谓词的行

时间:2014-05-09 14:12:57

标签: sql database oracle

我有一个Oracle表,其中包含以下列:

ID(PK) COLUMN_1 COLUMN_2 Column_3 Column_4(仅值为0或1)

我需要在Column_1,Column_2,Column_3找到同一个表中的匹配行,并删除Column_4不为0的所有匹配行

我该怎么做?

1 个答案:

答案 0 :(得分:0)

delete from table_x
where exists
  (select * from table_x t2
    where t2.id!=table_x.id
      and t2.column_1=table_x.column_1
      and t2.column_2=table_x.column_2
      and t2.column_3=table_x.column_3)
    and table_x.column_4!=0

t2.id!= table_x.id是必要的,因此记录与自身不匹配。

请注意,使用上面的查询,如果有两行匹配第1,2和3列,并且两列都有第4列!= 0,它将同时删除两者,因为两者都有匹配的记录,并且两者都是column_4 != 0。通过对上述内容的严格字面解读,我认为这就是你想要的。如果这不是您的意思,您可能需要更改一些查询。

与任何可能删除大量记录的查询一样,我会制作要测试的表的副本,或者在结果不符合您预期的情况下制定其他备份计划。 : - )