当前位置: 首页 > 面试题库 >

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

羊柏
2023-03-14
问题内容

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

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

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


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 如标题所述,我想要一个解决方法… 干杯 问题答案: 您可能会希望将an添加到嵌套查询中。

  • 问题内容: 当需要有序集的最后一行时,通常会创建派生表并重新排序。例如,要以自动递增的方式返回表的最后3个元素: 由于也可以具有偏移量,因此如果我们事先知道此查询的行数(例如10),则可以实现相同的结果: 是否可以对表运行子查询并使用该数字动态构建一个? 问题答案: 不,不可能指定动态偏移量。 带有子查询的原始查询是执行此操作的最简单方法。

  • 问题内容: 我想知道是否可以在@Query批注中包含子查询(org.springframework.data.jpa.repository.Query;) 我在第一个子查询括号上得到QuerySyntaxException。 这是我的查询 谢谢! 问题答案: 不可以,JPQL查询的select子句中不能包含子查询。 JPQL在WHERE和HAVING子句中支持子查询。它可以(至少)是ANY,SOM

  • 问题内容: 我试图弄清楚为什么我的查询之一变慢以及如何解决它,但是我对结果有些困惑。 我有一个约80列和775179行的表,并且正在执行以下请求: 在4.5秒内返回38行 删除时,我得到了很好的改进: 0.30秒内38行 但是,如果在不触摸的情况下删除,我会得到更好的结果: 0.10s(??)中的38行 为什么我的LIMIT这么饿? 继续前进 在尝试发送答案之前,我尝试了一些尝试,并注意到我有一个

  • 问题内容: 我正在尝试在计算机上运行以下代码,但是它没有执行任何操作,也没有显示任何错误。 有人可以帮帮我吗?顺便说一句,我正在使用Java 7。 问题答案: 如果将-放在-block 的末尾,它将在Java 6及更低版本中正确运行(没有有效的!)。这是因为该块是 在搜索有效方法 之前 执行的,因此,如果您在静态块的末尾退出程序,则不会收到任何错误。 但是, 此行为在Java 7中已更改。现在,您

  • 嗨,Dynamodb社区, 因此,所讨论的表是MLA_USER_AUTH。正如您所看到的,它有As分区键和As排序键。我希望能够使用用户id和电子邮件查询数据库。 有时我需要查找与电子邮件关联的用户,有时还需要查找用户ID。电子邮件和用户ID属性对于每个访问者都是唯一的。有什么办法可以做到吗? 这是我目前的查询。这显然行不通。当它抛出错误时:ValidationExc0019:查询条件错过了关键架