小编典典

MySQL是否可以使用LIMIT语法进行子查询?如果没有,为什么?

sql

我有MySQL
Server版本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

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

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语法之后。但仍然错误。

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

我需要 简短简单简洁的技术 说明。


阅读 252

收藏
2021-04-14

共1个答案

小编典典

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

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

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

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

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

2021-04-14