MySQL 是否可以在 LIMIT 语法之后进行子查询?如果不是,为什么?

本教程将介绍MySQL 是否可以在 LIMIT 语法之后进行子查询?如果不是,为什么?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

MySQL 是否可以在 LIMIT 语法之后进行子查询?如果不是,为什么? 教程 第1张

问题描述

我有 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 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的 '( SELECT (COUNT(*)-1) total FROM data_val AS dv2a ' 附近使用正确的语法

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

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

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

推荐答案

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

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

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

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

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

好了关于MySQL 是否可以在 LIMIT 语法之后进行子查询?如果不是,为什么?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。