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構文にエラーがあります。1行目の「LEFTOUTERJOINMOVIE m ON(m.ISBN = f.ISBN)GROUP BY ISBN ORDER BY score DESC L」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

私は自分の問題を見ることができないように見えるので、これにいくつかの新鮮な目をしたいと思います。

前もって感謝します!

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句にリストされているすべての列は、groupby句に含まれている必要があります。

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 に答える