【问题标题】:JDBC with Mysql: using mulitple outer joins with where clausesJDBC 与 Mysql:使用带有 where 子句的多个外连接
【发布时间】:2013-03-14 08:35:37
【问题描述】:

我对以下查询有疑问。它适用于 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 服务器版本,用于在 'LEFT OUTER JOIN 附近使用正确的语法 MOVIE m ON (m.ISBN = f.ISBN) GROUP BY ISBN ORDER BY score DESC L' at 第 1 行

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

提前致谢!

【问题讨论】:

    标签: mysql jdbc


    【解决方案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 行出现语法错误:'BY score DESC LIMIT 5'。有什么想法吗??
    • 没关系。我需要添加一个空格。一切都很好。非常感谢!
    • @user2187534 好的,不客气 :) 如果可行,请不要忘记接受 asnwer。
    【解决方案2】:

    左连接必须在 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 ? 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多