我遇到以下问题的问题。它适用于mysql工作台,但是当我在带有jdbc的java中使用它时。我一直收到语法错误。
以下是查询:
"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服务器版本,用于在'LEFT OUTER JOIN附近使用正确的语法 MOVIE m ON(m.ISBN = f.ISBN)GROUP按ISBN排序依据得分DESC L'at 第1行
我会喜欢一些新鲜的眼睛,因为我似乎无法看到我的问题。
提前致谢!
答案 0 :(得分: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 ?
答案 1 :(得分: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 ?