如何在postgres表中删除两个重复条目的一行?

时间:2016-11-13 10:47:21

标签: sql postgresql duplicates

除了时间戳列 - created_at

之外,这两行具有相同的列

我只想保留其中一行 - 无所谓。

这就是我能够根据具有较小值的created_at列选择我可以删除的每个重复行中的一个。

 select e.id, e.user_id, e.r_needed, e.match, e.status, e.stage, e.created_at 
    from employee e, employee e2 where e.id=e2.id and e.user_id=e2.user_id and 
     e.status = 12 and e2.status=12 and e.stage=false and e2.stage=false and 
     e.match=true and e2.match=true and e.user_id=12 and e.r_needed=true and e2.r_needed=true
     and e.created_at<e2.created_at and DATE(e.created_at)='2015-10-08';

但是,无法想象我如何删除这一行,以便两个重复项都不会被删除,只有上面选择的重复项呢?

基本上,我想删除与上面的select查询中的列匹配的所有行以及create_at值较小的行。

我的表没有主键或唯一键。

1 个答案:

答案 0 :(得分:1)

您可以使用相关子查询而不是连接:

select * from employee e
where exists
 ( select * from employee e2 
   where e.id=e2.id and e.user_id=e2.user_id 
     and e.status = 12 and e2.status=12 and e.stage=false 
     and e2.stage=false and e.match=true and e2.match=true 
     and e.user_id=12 and e.r_needed=true and e2.r_needed=true
     and e.created_at<e2.created_at 
     and DATE(e.created_at)='2015-10-08'
 );

如果这会正确返回重复的行,您可以切换到delete而不是select *