MySQL错误1064:SELECT语句中的SQL语法错误

时间:2015-05-06 05:53:54

标签: php mysql

我对某些先进的MySQL查询相对较新。我一直在尝试使用MySQL SELECT语句使用以下MySQL查询查询特定用户的订单表中的最新订单。

SELECT o1.* FROM order AS o1
WHERE o1.orderDateTime = 
( 
  SELECT MAX(o2.orderDateTime) FROM order AS o2
  WHERE o2.userId = '1'
) 

但是我一直在不断收到与MySQL语法相关的以下MySQL错误#1064。

#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以便在正确的语法附近使用'命令AS o1 WHERE o1.orderDateTime =(SELECT MAX(o2.orderDateTime)FROM order AS' at line 1

我在INSERT语句中遇到了类似的错误,但我设法使用MySQL 1064: You have an error in your SQL syntax中指定的方法修复了它 我尽力修复当前案例中的查询,但我仍然没有成功。

如果有人可以帮我修复上面指定的SELECT子句的MySQL语法错误,我将不胜感激。如果有人能指出我发生这个问题的确切原因,那将是很好的。

3 个答案:

答案 0 :(得分:5)

order是一个保留字,对于表名来说是一个糟糕的选择。您需要在查询中使用反引号进行转义

SELECT o1.* FROM `order` AS o1
WHERE o1.orderDateTime = (
    SELECT MAX(o2.orderDateTime) FROM `order` AS o2
    WHERE o2.userId = '1'
) 

http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html

答案 1 :(得分:0)

根据@Abhik,order是一个MySQL关键字。

你应该避免使用两种方法崩溃:

  1. 使用反引号(`)(@Abhik已经解释了这一点。)
  2. 在表名前添加数据库名称,例如 DataBase_Name.order
  3. 但是,仍然@ Abhik的方法更好,因为在数据库名称更改的情况下,您需要在查询中更改DataBase名称。

答案 2 :(得分:0)

首先,您可以按照@Abhik Chakraborty的建议,在订单表名称后面加上回滴答。 order是mysql中的保留字。我的建议是改进你的SQL查询。你可以使用:

来完成相同的工作
SELECT o1.* FROM `order` o1
WHERE  o1.userId = '1' order by orderDateTime desc limit 1

子查询似乎没必要。