2013-03-24 71 views
1

我遇到以下查詢的問題。它在mysql工作臺中工作,但不能在java中使用jdbc時使用它。我不斷收到語法錯誤。JDBC與Mysql:使用多個外部連接與where子句

下面是該查詢:

"SELECT f.ISBN, f.text, m.title, AVG(r.rating) as score" + 
" FROM RATES r LEFT OUTER JOIN FEEDBACK f ON (f.fid = r.fid) WHERE f.ISBN = ? " + 
"LEFT OUTER JOIN MOVIE m ON (m.ISBN = f.ISBN) " + 
"GROUP BY ISBN " + 
"ORDER BY score DESC LIMIT ? "; 

我做了一些搜索,發現{}辛普森的JDBC轉義語法。但我會得到另一個語法錯誤。

我最近收到的錯誤是:

HTTP狀態500 - javax.servlet.ServletException:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你在你的SQL的錯誤 句法;檢查對應於您 MySQL服務器版本的使用近 'LEFT OUTER JOIN MOVIE米ON(m.ISBN = f.ISBN)GROUP BY ISBN ORDER BY得分DESC L' 在 線正確的語法手動1

因爲我似乎無法看到我的問題,所以我很想關注一些新鮮事物。

在此先感謝!

回答

1

我認爲WHERE子句必須放在JOINING之後。接下來的問題是select子句中的列數等於group子句中的列數(除了函數avg,count等)。所以你需要像這樣糾正你的查詢:

SELECT f.ISBN, f.text, m.title, AVG(r.rating) as score 
FROM RATES r 
LEFT OUTER JOIN FEEDBACK f ON (f.fid = r.fid) 
LEFT OUTER JOIN MOVIE m ON (m.ISBN = f.ISBN) 
WHERE f.ISBN = ? 
GROUP BY f.ISBN, f.text, m.title 
ORDER BY score DESC LIMIT ? 
+0

幾乎可以工作。我現在在第1行得到語法錯誤:'BY score DESC LIMIT 5'。任何想法? – Char 2013-03-24 23:09:57

+0

沒關係。我需要添加一個空間。一切都很好。非常感謝! – Char 2013-03-24 23:11:58

+0

@ user2187534好的,歡迎你:)不要忘記,如果它工作,請接受。 – Sajmon 2013-03-24 23:17:18

0

左連接必須在where子句之前。 select子句中列出的每一列應該在group by子句中:

SELECT f.ISBN, f.text, m.title, AVG(r.rating) as score 
FROM RATES r 
LEFT OUTER JOIN FEEDBACK f ON (f.fid = r.fid) 
LEFT OUTER JOIN MOVIE m ON (m.ISBN = f.ISBN) 
WHERE f.ISBN = ? 
GROUP BY f.ISBN f.text, m.title 
ORDER BY score DESC 
LIMIT ?