【问题标题】:MySQL Is doing subquery after LIMIT syntax possible? If not, why?MySQL 是否可以在 LIMIT 语法之后进行子查询?如果不是,为什么?
【发布时间】:2011-09-12 20:21:02
【问题描述】:

我有 MySQL 服务器版本 5.1.53。我正在寻找一个小时来自己回答这个问题。包括在http://dev.mysql.com/doc/refman/5.1/en/select.html阅读文档本身

目前,我运行此查询。

SELECT dv2.timestamp 
FROM data_val AS dv2
WHERE dv2.timestamp > '2011-06-10 22:26:25' ORDER BY dv3.timestamp DESC 
LIMIT 1

然后我试图通过确定 MAX_QUERIES 减 1 的计算来消除 ORDER BY 语法。这样我可以写,

SELECT  (COUNT(*)-1) total 
FROM data_val AS dv2a
WHERE dv2a.timestamp > '2011-06-10 22:26:13'

最后查询变成了,

SELECT dv2.timestamp 
FROM data_val AS dv2
WHERE dv2.timestamp > '2011-06-10 22:26:13' 
LIMIT (
     SELECT  (COUNT(*)-1) total 
     FROM data_val AS dv2a
     WHERE dv2a.timestamp > '2011-06-10 22:26:13'
     ), 1

错误是:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT (COUNT(*)-1) total FROM data_val AS dv2a ' at line 4

我还尝试将子查询放在OFFSET 语法之后。但仍然错误。

您知道为什么我的子查询不起作用吗?

我需要 short 的技术细节, 简单,以及干净的解释。

【问题讨论】:

    标签: mysql sql syntax subquery limit


    【解决方案1】:

    来自 MySQL 手册:http://dev.mysql.com/doc/refman/5.5/en/select.html

    LIMIT 子句可用于限制 SELECT 语句返回的行数。 LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量,但以下情况除外:

    在准备好的语句中,LIMIT 参数可以使用?占位符标记。

    在存储程序中,LIMIT 参数可以使用整数值的例程参数或 MySQL 5.5.6 起的局部变量来指定。

    MySQL 查询优化器需要在运行查询之前将限制参数解析为常量,否则它将不知道要返回多少行。

    【讨论】:

    • 总之MySQL不先执行我的子查询?
    • @exodream,没错,它会拒绝这样做。因为它是这样编程的。
    【解决方案2】:

    您不能为限制参数嵌入查询结果

    【讨论】:

    • 为什么?我需要技术细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多