错误的 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
,但您列出了name
和status
。对于每个`年龄,您期望哪个name
?
但还有另一个难题。我看到 3 个双引号 ("
)。想想看。考虑为内部需要或外部需要使用单引号。
【讨论】:
嗨瑞克,非常感谢您的回复。为了在此处发布,我实际上修改了原始查询。实际查询是正确的,并且在除 H2 之外的真实数据库中运行良好。是因为 H2 不支持 COUNT(status) 吗?如何检查不为空的状态? 什么是 backtics? 嗨,我在 where 条件中添加了and status IS NOT NULL
,并用 count(*) 修改了 count(status),我仍然看到同样的错误。
没关系我智障。有一个 rowmapper 实现,其中存在 count(status)。也将其转换为 count(*)。以上是关于错误的 SQL 语法...找不到列“COUNT(status)”的主要内容,如果未能解决你的问题,请参考以下文章