除了时间戳列 - 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值较小的行。
我的表没有主键或唯一键。
答案 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 *
。