首页  >  文章  >  数据库  >  为什么在 NOT IN 子查询中使用 LIMIT 时 MySQL 会失败?

为什么在 NOT IN 子查询中使用 LIMIT 时 MySQL 会失败?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 00:54:03820浏览

Why Does MySQL Fail When Using LIMIT in NOT IN Subqueries?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn