0

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.

1
  • 2
    order is reserved word use bacticks to escape Commented May 6, 2015 at 5:54

3 Answers 3

6

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

Sign up to request clarification or add additional context in comments.

1 Comment

Yeah it worked for me... Understood the reason as well... Thanks a lot
0

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.

2 Comments

You are referring Abhik's answer for almost everything you mentioned. So it would be better to upvote the answer instead of adding a new answer.
@sgtBose, thanks for the comment. I have already upvoted. But, I just wanted to mention that there is a second way also to fix the issue along with referred answer.
0

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.

1 Comment

note this is not much use if the intent is for this query to be further used in forming other queries

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.