首页 > 解决方案 > 如何在 jooq 中进行 select max 语句

问题描述

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

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

我试过了:

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

任何帮助将不胜感激。

标签: javamysqljooq

解决方案


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

没有代码生成

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

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

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

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

没有静态导入DSL.*

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

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

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

这两个先决条件都记录在手册中有关如何阅读手册的部分中。它们都是可选的,您可以在没有这些静态导入的情况下使用 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)


推荐阅读