doudui1850
2015-05-06 05:53
浏览 403
已采纳

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

I am relatively new to somewhat advanced MySQL querying. I had been trying to query the most recent order in an order table of a particular user using MySQL SELECT statement using the following MySQL query.

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

But I had been constantly getting the following MySQL error #1064 related to MySQL syntax.

#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 'order AS o1 WHERE o1.orderDateTime = (SELECT MAX(o2.orderDateTime)FROM order AS ' at line 1

I got similar errors in relation with INSERT statements but I managed to fix it up using the methods specified in MySQL 1064: You have an error in your SQL syntax I made every effort to fix the query in the current case but I was still unsuccessful.

I would be grateful to you if someone can help me out with fixing this MySQL syntax error for SELECT clause specified above. It would be great if someone could specify me the exact reason for the occurrence of this issue, as well.

图片转代码服务由CSDN问答提供 功能建议

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

  SELECT o1。* FROM order AS o1  
WHERER o1.orderDateTime = 
(
 SELECT MAX(o2.orderDateTime)FROM order AS o2 
 WHERE o2.userId ='1'
)
   
 
 < 但是我一直在收到与MySQL语法相关的以下MySQL错误#1064。 
 
 

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

我在INSERT语句中遇到了类似的错误,但我设法使用 MySQL 1064:你的SQL语法有错误 我在当前案例中尽力修复查询,但我仍然没有成功。< / p>

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • douqiao4450 2015-05-06 05:54
    已采纳

    order is a reserved word and its a bad choice for table name. You need to escape using backticks in the query

    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

    已采纳该答案
    打赏 评论
  • doutui4649 2015-05-06 06:07

    As per @Abhik, order is a MySQL keyword.

    And you should avoid collapse with two methods:

    1. Use backticks (`) (@Abhik has already explained this.)
    2. Prepend Database name before Table Name e.g. DataBase_Name.order.

    But, still @Abhik's approach is preferable as in case of database name change, you need to change DataBase name in your query.

    打赏 评论
  • douzhang5121 2015-05-06 06:14

    First of all you could follow @Abhik Chakraborty suggestion to include back ticks around order table name. order is a reserved word in mysql. My suggestion was to improve your sql query. YOu could acomplish the same using:

    SELECT o1.* FROM `order` o1
    WHERE  o1.userId = '1' order by orderDateTime desc limit 1
    

    the subquery seems unnecessary.

    打赏 评论

相关推荐 更多相似问题