JDBC与Mysql:在where子句中使用多个外连接

时间:2013-03-24 22:49:30

标签: mysql jdbc

我遇到以下问题的问题。它适用于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行

我会喜欢一些新鲜的眼睛,因为我似乎无法看到我的问题。

提前致谢!

2 个答案:

答案 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 ?