MYSQL删除最近50条之外的记录

任务

假设空间有空,每晚需要对邮件进行处理,删除最近50条之外的数据

解决过程

1 坑1,发现mysql 旧版本不支持in...好了,换个思路

delete from team_mail where id in (select id from team_mail where team_id = 15 order by id desc limit 50 ) 

2 坑2,错误提示,发现不能delete和select同一个表,这个问题只会出现在mysql...嵌套一层select就能解决

delete from team_mail where team_id = 15 and id < (select min(id) from team_mail where team_id = 15 order by id desc limit 50 )  

3 坑3,执行成功,但是结果不如意,建议发现min_id 一直是最小的那个,怀疑是min是在limit 之前执行的...好吧,嵌套一下

delete from team_mail where team_id = 15 and id < (select min(id) from (select id from team_mail where team_id = 15 order by id desc limit 50 ) a)

至此问题解决
顺提,上面别名a 不能删除,因Every derived table must have its own alias(每一个派生出来的表都必须有一个自己的别名

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容