![](/img/trans.png)
[英]How to delete rows in Table1 where COUNT of WHERE in Table2 is greater than 0?
[英]How to delete from table if count is greater than 20
我有一个mysql表,我需要在添加其他记录之前只包含20条最新记录。 每天都会添加新行,因此我希望首先删除任何大于最早允许的记录。
该表包含一个自动增量“id”列,因此我可以轻松确定哪个是最早的记录。
谢谢你的帮助。
您可以在查询中使用LIMIT
关键字指定偏移量,以保留最新的20行。 然而,根据MySQL的文档,没有简单的方法可以将偏移限制为最后一个; 相反,他们建议:
要从特定偏移量检索所有行直到结果集的末尾,可以使用一些大数字作为第二个参数。
所以这个SQL应该可以解决这个问题:
DELETE FROM table ORDER BY id DESC LIMIT 20, 18446744073709551615;
使用mysql 5,您无法在删除语句中使用偏移量。 进一步阅读: http : //dev.mysql.com/doc/refman/5.0/en/delete.html
我已设法使用以下技术来实现保留一定数量的最新记录。 mySQL子查询限制
delete
语句没有offset
。 请参阅https://stackoverflow.com/a/8303440/2576076 ,它提供了一个很好的解决方案。
使用DELETE
和ORDER BY
和LIMIT
:
DELETE FROM MyTable
ORDER BY MyTable.id DESCENDING
LIMIT 20,18446744073709551615;
这将留下具有最大id
的20个记录并删除其余记录。
为什么不保持所有记录不受影响?
这是数据库的发明。 如果你只想保留最新的数据,你可能需要另一个存储空间,比如memcache
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.