簡體   English   中英

MySQL錯誤1064:SELECT語句中的SQL語法錯誤

[英]MySQL error 1064: SQL syntax error in SELECT statement

對於比較高級的MySQL查詢,我還比較陌生。 我一直在嘗試使用以下MySQL查詢使用MySQL SELECT語句查詢特定用戶的訂單表中的最新訂單。

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服務器版本相對應的手冊以獲取正確的語法,以在'order AS o1 WHERE o1.orderDateTime =(SELECT MAX(o2.orderDateTime)FROM order AS'在第1行附近使用

我在INSERT語句方面也遇到類似的錯誤,但是我設法使用MySQL 1064中指定的方法對其進行了修復:您的SQL語法有錯誤,在當前情況下,我已盡全力修復了查詢,但仍然沒有成功。

如果有人可以幫我解決上面指定的SELECT子句的MySQL語法錯誤,我將不勝感激。 如果有人也可以指定我發生此問題的確切原因,那將是很好的。

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

根據@ Abhik, order是MySQL關鍵字。

而且您應該通過兩種方法避免崩潰:

  1. 使用反引號(`)(@ Abhik已經對此進行了解釋。)
  2. 在表名之前添加數據庫名,例如DataBase_Name.order

但是,@ Abhik的方法仍然是首選,因為在更改數據庫名稱的情況下,您需要在查詢中更改數據庫名稱。

首先,您可以按照@Abhik Chakraborty的建議在訂單表名稱周圍添加反勾。 order是mysql中的保留字。 我的建議是改善您的sql查詢。 您可以使用以下方法完成相同的操作:

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

子查詢似乎不必要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM