错误的 SQL 语法...找不到列“COUNT(status)”

Posted

技术标签:

【中文标题】错误的 SQL 语法...找不到列“COUNT(status)”【英文标题】:bad SQL grammar... Column "COUNT(status)" not found 【发布时间】:2019-04-12 09:49:36 【问题描述】:

我有一个批处理作业,我正在使用内存 H2 数据库进行测试。我有一个阅读器,可以很好地与我计算机上安装的数据库一起工作。但是当我使用 H2 测试它时,我得到了这个错误:

org.springframework.jdbc.BadSqlGrammarException:尝试处理下一行失败;错误的 SQL 语法 [从 myTable 中选择名称、年龄、状态、COUNT(STATUS)];嵌套异常是 org.h2.jdbc.JdbcSQLException:找不到列“COUNT(status)” [42122-197]

这是我的读者。我不知道为什么我会遇到错误。

JdbcCursorItemReader<myObject> reader = new JdbcCursorItemReader<>();
reader.setSql("select name, age, status, COUNT(STATUS) from myTable
where name="something",
group by name, age, status
order by name, age, status);

【问题讨论】:

您的分组依据不是有效的 SQL。阅读:***.com/questions/41887460/… @MadhurBhaiya 嗨,感谢您的回复。实际查询很长而且正确。我发布了这个查询只是作为一个例子。 【参考方案1】:

听起来有些处理器在COUNT(STATUS) 周围添加了反引号。

COUNT(STATUS) 可能不是您想要的。对于每一行(每个年龄的 name="something"),检查 STATUS 是否为 NOT NULL,然后提供有多少不为空的计数。

COUNT(*) 是计算行数的常用方法。

下一个问题,...GROUP BY age,但您列出了namestatus。对于每个`年龄,您期望哪个name

但还有另一个难题。我看到 3 个双引号 (")。想想看。考虑为内部需要或外部需要使用单引号。

【讨论】:

嗨瑞克,非常感谢您的回复。为了在此处发布,我实际上修改了原始查询。实际查询是正确的,并且在除 H2 之外的真实数据库中运行良好。是因为 H2 不支持 COUNT(status) 吗?如何检查不为空的状态? 什么是 backtics? 嗨,我在 where 条件中添加了and status IS NOT NULL,并用 count(*) 修改了 count(status),我仍然看到同样的错误。 没关系我智障。有一个 rowmapper 实现,其中存在 count(status)。也将其转换为 count(*)。

以上是关于错误的 SQL 语法...找不到列“COUNT(status)”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“java.sql.SQLException:找不到列 'id'。” Spring Boot 中的错误

Python中的SQL更新命令找不到列并且数据库被锁定

在 discordjs 中找不到 mysql 语法错误

访问 SQL 的语法错误

播种时LARAVEL 5.4 SQL“找不到列”

SQLSTATE [42S22]:找不到列:1054 未知列 - Laravel