SQL中如何删除除最新N条记录外的所有记录
这是一个常见的问题:您的表中充满了记录,但您只想保留最新的N条记录,而删除其余的记录。虽然您提出的查询演示了意图,但由于MySQL的限制,它未能达到目的。
别担心,解决方案存在!以下查询将实现您想要的结果:
1 2 3 4 5 6 7 8 9 10 | <code class = "language-sql" > DELETE FROM `table`
WHERE id NOT IN (
SELECT id
FROM (
SELECT id
FROM `table`
ORDER BY id DESC
LIMIT N -- 保留最新的N条记录
) foo
);</code>
|
登录后复制
查询分解:
- DELETE语句的目标是'table'表,用于删除记录。
- WHERE子句通过检查id是否不存在于子查询中来排除要删除的记录。
- 子查询通过按降序排列记录(id DESC)并限制结果来选择最新的N条记录。
- 中间子查询(foo)对于减轻MySQL限制是必要的。
绕过的限制:
- 中间子查询通过将子查询与DELETE操作隔离来防止“FROM子句中更新目标表的错误”。
- 它还通过使用子查询的子查询来避免“LIMIT & IN/ALL/ANY/SOME子查询”错误。
优化说明:
根据您的用例,您可能会发现以下优化的查询更合适:
1 2 3 | <code class = "language-sql" > DELETE FROM `table`
ORDER BY id DESC
LIMIT ROWS COUNT () - N -- 只保留最新的N条记录</code>
|
登录后复制
如果符合您的要求,请考虑此优化,因为它可以显著提高性能。
以上是MySQL如何删除除最新的N条记录外的所有记录?的详细内容。更多信息请关注PHP中文网其他相关文章!