mysql - Spring Dao says bad SQL grammar - 语法错误

标签 mysql spring

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE model_state_history FROM model_state_history INNER JOIN model ON model_state_history.model_id = model.id WHERE model.package_id = ?]; nested exception is org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "DELETE model_state_history FROM[*] model_state_history INNER JOIN model ON model_state_history.model_ID = model.ID WHERE model.PACKAGE_ID = ? "; SQL statement:

它在输出中抛出上面的内容。在我看来,我没有看到语法错误。我正在使用 MySQL 数据库。上面的SQL语法有没有明显的错误?

使用 DELETE FROM 语法也会给出语法错误。

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [DELETE FROM model_state_history INNER JOIN model ON model_state_history.model_id = model.id WHERE model.package_id = ?]; nested exception is org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "DELETE FROM model_STATE_HISTORY INNER[*] JOIN model ON model_STATE_HISTORY.model_ID = model.ID WHERE model.PACKAGE_ID = ? "; SQL statement: DELETE FROM model_state_history INNER JOIN model ON model_state_history.model_id = model.id WHERE model.package_id = ? [42000-176]

这是正在运行的代码片段

  @Transactional
  private int deleteAllModels(Long packageId) throws DataAccessException {
    return new NamedParameterJdbcTemplate(dataSource).update(
        "DELETE FROM model_state_history INNER JOIN model ON model_state_history.version_id = model.id WHERE model.package_id = :package_id",
        ImmutableMap.of("package_id", packageId));

最佳答案

再三考虑,我认为您可能对 JOIN 语法有疑问。你在写

DELETE FROM ... INNER JOIN ... ON msh.version_id = m.id WHERE m.package_id = :package_id

我认为 WHERE 应该是 AND,所以查询会变成:

"DELETE FROM model_state_history INNER JOIN model 
 ON model_state_history.version_id = model.id AND model.package_id = :package_id"

因为 WHERE 引用回 DELETE 语句,它的“范围”中没有 model 表。

干杯,

关于mysql - Spring Dao says bad SQL grammar - 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26859869/

相关文章:

java - Spring MVC 设置全局 DateTimeFormat

PHP 不将日期存储在 MySQL 表列中

php - 循环内的表单无法正常工作

mysql - htaccess redirectmatch 有条件需要查询数据库

java - 无法正确映射静态资源

java - 在我的项目中使用 JAVA 实现 Elasticsearch 的最佳方法是什么?

python - 通过 python 运行 mysqldump 时出错-访问被拒绝

php - 如何仅使用我的更改来更新我的 symfony 模块?

java - csv 中不显示中文文本

java - MockRestServiceServer 在集成测试中模拟后端超时