我有一个Oracle表,其中包含以下列:
ID(PK) COLUMN_1 COLUMN_2 Column_3 Column_4(仅值为0或1)
我需要在Column_1,Column_2,Column_3找到同一个表中的匹配行,并删除Column_4不为0的所有匹配行
我该怎么做?
答案 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。通过对上述内容的严格字面解读,我认为这就是你想要的。如果这不是您的意思,您可能需要更改一些查询。
与任何可能删除大量记录的查询一样,我会制作要测试的表的副本,或者在结果不符合您预期的情况下制定其他备份计划。 : - )