NOT IN 子查询中的 LIMIT:MySQL 限制
使用 MySQL 时,在 LIMIT 子句中使用子查询时可能会遇到限制。尝试删除不包含在特定范围内的记录时会出现一个常见问题。
假设您要删除不属于最新 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);
在此修改后的查询中,选择最新 15 个帖子的子查询分配一个别名“t”,然后外部子查询使用该别名来检索排除的 ID。结果是一个有效的查询,应该实现所需的删除。
以上是为什么在 NOT IN 子查询中使用 LIMIT 时 MySQL 会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!