【问题标题】:bad SQL grammar... Column "COUNT(status)" not found错误的 SQL 语法...找不到列“COUNT(status)”
【发布时间】: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。阅读:stackoverflow.com/questions/41887460/…
  • @MadhurBhaiya 嗨,感谢您的回复。实际查询很长而且正确。我发布了这个查询只是作为一个例子。

标签: mysql database spring-boot mariadb h2


【解决方案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(*)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2014-08-27
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多