MySQL 子查询限制:删除最新 15 条帖子
在数据库优化领域,经常需要删除冗余或过时的数据。这个问题探讨了如何使用 MySQL 子查询删除除最新 15 条之外的所有帖子。
原始查询:
DELETE FROM posts WHERE id NOT IN (SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15)
但是,由于 MySQL 缺乏对早期版本中的“LIMIT & IN/ALL/ANY/SOME”子查询。为了解决这个问题,可以使用修改后的查询:
DELETE FROM posts WHERE id NOT IN ( SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15 ) AS t);
在此修改后的查询中,使用别名“t”引入了一个附加子查询作为派生表。此派生表包含最新 15 个帖子的 ID,根据时间戳按降序排序。然后,主查询在删除帖子时利用此派生表来排除那些特定的 ID。
通过使用此解决方法,可以达到删除所有帖子的预期结果,除了 MySQL 版本中最近的 15 个帖子之外。不支持“LIMIT & IN/ALL/ANY/SOME”子查询。这种修改后的方法有效地删除了过时的帖子,同时保留了最新的帖子以供进一步参考。
以上是如何在没有'LIMIT & IN”子查询支持的 MySQL 中删除除最新 15 条之外的所有帖子?的详细内容。更多信息请关注PHP中文网其他相关文章!