LIMIT 子句导致 mysql 查询的语法错误[关闭]

Posted

技术标签:

【中文标题】LIMIT 子句导致 mysql 查询的语法错误[关闭]【英文标题】:LIMIT clause causing syntax error for mysql query [closed] 【发布时间】:2020-11-12 19:16:26 【问题描述】:

我正在尝试运行 mysql 查询,但出现以下错误。

错误:

DBD::mysql::st execute failed: 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 'LIMIT  50
# LIMIT 50
)' at line 20 at /usr/local/Call.pm line 626.

代码:

UPDATE schedule SET owner = ?
WHERE id in
(SELECT id from schedule
WHERE owner < 0
AND status IN ($STATUS_REQUESTED, $STATUS_NO_STATUS, $STATUS_IN_PROGRESS)
AND lastaction < TO_DATE(?, '$datefmt')
AND
  $self->flowrate >
(
  SELECT COUNT(*) FROM schedule b
  WHERE dialoutstart > b.dialoutstart
  AND owner < 0
  AND status IN ($STATUS_REQUESTED, $STATUS_NO_STATUS, $STATUS_IN_PROGRESS)
  AND lastaction < TO_DATE(?, '$datefmt')
)
AND LIMIT <= $self->flowrate
)

SQL 版本:5.*。

这里会导致语法错误的问题是什么?

【问题讨论】:

我不明白准备好的和未准备好的变量的混合。 不过就是说,TO_DATE 不是 mysql 函数,所以不妨先弄清楚你实际使用的是哪个 RDBMS 【参考方案1】:

您只需删除“LIMIT”之前的“AND”即可。见这些: https://dev.mysql.com/doc/refman/8.0/en/select.html https://dev.mysql.com/doc/refman/8.0/en/update.html

这是因为 SELECT 语句的 LIMIT 部分不是 WHERE 部分的一部分,而是它自己的一部分。

...
    [WHERE where_condition]
...
    [LIMIT [offset,] row_count | row_count OFFSET offset]
...

【讨论】:

以上是关于LIMIT 子句导致 mysql 查询的语法错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL LIMIT 子句

实习踩坑之路:一个诡异的SQL?PageHelper莫名多了一个Limit子句,导致SQL执行错误?

mysql分页查询语法

MySQL的Limit详解

Mysql基础专题08-数据库的查询操作

mysql 查询的所有操作