2013-03-24 70 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 ?