【问题标题】:How to make a select max statement in jooq如何在 jooq 中进行 select max 语句
【发布时间】:2020-06-29 16:04:15
【问题描述】:

我想将以下 SQL 语句翻译成 jooq 语法:

select max(table.column) from table group by table.anothercolumn

我试过了:

  • dsl.select(table.colum, max())
  • DSL.select(table.colum, max())
  • dsl.select(table.colum.max())
  • DSL.select(table.colum.max())

但是根据 Eclipse,这些语法都是不正确的......

任何帮助将不胜感激。

【问题讨论】:

  • 我不是 Eclipse 专家,但您可以添加您的 Eclipse 版本吗?是否有支持 jooq-syntax 的插件或者是嵌入式的?如果是插件,请同时添加版本。
  • 您能否发布您的整个 jooq 查询,以及您收到的错误消息
  • “不正确”是什么意思? Field.max() 已被弃用?
  • 简化的内容布局

标签: java mysql jooq


【解决方案1】:

开始使用 jOOQ 时最常见的错误是:

无代码生成

jOOQ 手册和其他 Stack Overflow 问题中的大多数示例都假定您使用 jOOQ's code generator 对架构进行逆向工程。这意味着您将在生成的类中生成像table(更可能是TABLE)这样的对象。

您需要静态导入所有这些对象,例如使用

import static com.example.generated.Tables.*;

现在,您可以引用静态导入的所有表格,以及表格中的列

DSL.* 没有静态导入

最有效地使用 jOOQ 的另一个先决条件是从 DSL 静态导入所有方法:

import static org.jooq.impl.DSL.*;

这将允许您使用不合格的max(Field) 聚合函数。

这两个先决条件都记录在section of the manual about how to read the manual 中。它们都是可选的,您可以在没有这些静态导入的情况下使用 jOOQ,并且始终完全限定您的表达式。

工作示例

设置代码生成和静态导入后,以下查询将起作用:

DSLContext dsl = DSL.using(connection, dialect);

Result<?> result =
dsl.select(max(TABLE.COLUMN))
   .from(TABLE)
   .groupBy(TABLE.ANOTHERCOLUMN)
   .fetch();

按table.anothercolumn从表组中选择max(table.column)

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多