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/