【问题标题】:This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'此版本的 MySQL 尚不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'
【发布时间】:2015-03-07 12:40:48
【问题描述】:
SELECT MAX(issue) AS issue_one FROM issue_list
WHERE issue NOT IN (SELECT issue FROM issue_list ORDER BY id ASC LIMIT 46);

这个查询有什么问题。它说。此版本的 MySQL 尚不支持 'LIMIT & IN/ALL/ANY/SOME subquery'

我在这里要做的是从 issue_list 表中获取 issue 的最大值,忽略前 46 行。

怎么做?

【问题讨论】:

  • 你的版本是什么?
  • 我的mysql版本是mysql 5.6.17
  • " 这个版本的 MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME subquery'" 那么你的问题是如何规避这个?
  • 我只想编写解决我问题的查询。还回答如何规避这一点将不胜感激。
  • WHERE issue NOT IN (SELECT issue FROM(SELECT issue FROM issue_list ORDER BY id ASC LIMIT 46)x);怎么样

标签: mysql


【解决方案1】:

无论哪种形式,我都没有限制在子查询中工作。那么什么对我有用...

  1. 创建具有此类限制或其他限制的子查询视图,在您的情况下是限制关键字

    Create View viewIssue46 as SELECT issue FROM issue_list ORDER BY id ASC LIMIT 46;

  2. 像这样写查询

    SELECT MAX(issue) AS issue_one FROM issue_list WHERE issue NOT IN (select * from viewIssue46)

这通常可以轻松解决此类问题,甚至更复杂的查询,而且您可以在视图和主查询中使用索引。

【讨论】:

    【解决方案2】:

    正如Mihai 在他的评论中提到的那样:尝试将子选择包装在另一个子选择中。看起来很脏,但与您将要获得的原始查询一样接近。因此:

    SELECT MAX(issue) AS issue_one 
    FROM issue_list
    WHERE issue NOT IN 
    (SELECT issue from 
     (SELECT issue FROM issue_list ORDER BY id ASC LIMIT 46) x
    );
    

    【讨论】:

    • 感谢工作。你能建议我在这种情况下 x 做什么吗?谢谢。
    • @user2745337 每个子查询都需要一个别名,本质上是一个名称,因为它实现了子查询,也就是说,将其视为一个表。
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多