1

我对以下查询有疑问。它适用于 mysql 工作台,但当我在 java 中使用 jdbc 时不起作用。我不断收到语法错误。

这是查询:

"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 ? ";

我做了一些搜索,发现 {oj} 的 jdbc 转义语法。但我会得到另一个语法错误。

我最近遇到的错误是:

HTTP 状态 500 - javax.servlet.ServletException:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“LEFT OUTER JOIN MOVIE m ON (m.ISBN = f.ISBN) GROUP BY ISBN ORDER BY score DESC L”附近使用正确的语法

我希望对此有一些新的看法,因为我似乎看不到我的问题。

提前致谢!

4

2 回答 2

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 ?
于 2013-03-24T22:54:50.940 回答
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 ? 
于 2013-03-24T22:55:28.347 回答