JOOQ如何从表中选择最小的“ id”

Jim*_* NH 3 java sql jooq

在MySQL中,我想执行这样的查询

SELECT MIN(id) FROM table;
Run Code Online (Sandbox Code Playgroud)

我越了解JOOQ语法和聚合函数,就会感到困惑。

我以为这样的事情会起作用

select( EVENT.EVENTID , min() ).from( EVENT ).fetch();
or
Result<Integer> er = context.select( EVENT.EVENTID.min()).fetch();
Run Code Online (Sandbox Code Playgroud)

我尝试通过选择整个第一条记录来解决问题

Result<EventRecord> er2 = context.selectFrom(EVENT).orderBy(EVENT.EVENTID.asc()).limit(1).fetch();
Run Code Online (Sandbox Code Playgroud)

如果结果的大小为0,则说明一条记录不存在,但是如果结果不为0,则得到正确的记录。我想使用min()函数,但是语法不正确。

Luk*_*der 7

您要在SQL中编写的查询是以下查询:

SELECT MIN(event.eventid) FROM event
Run Code Online (Sandbox Code Playgroud)

这就是为什么您的两次尝试都无效的原因

// 1. You cannot combine single columns with aggregate functions in SQL,
//    unless you're grouping by those columns
// 2. You didn't pass any cargument column to the MIN() function
context.select( EVENT.EVENTID , min() ).from( EVENT ).fetch();

// 3. This doesn't specify any FROM clause, so your database won't know what
//    table you want to select the MIN(eventid) from
context.select( EVENT.EVENTID.min()).fetch();
Run Code Online (Sandbox Code Playgroud)

请注意,这些想法并非特定于jOOQ,它们通常与SQL有关。使用jOOQ时,请始终考虑要首先表达的SQL语句(我的答案顶部的那个)。因此,您的jOOQ语句将类似于以下任何一种:

// "Postfix notation" for MIN()
context.select(EVENT.EVENTID.min()).from(EVENT).fetch();

// "Prefix notation" for MIN(), where min() is static-imported from
// org.jooq.impl.DSL
context.select(min(EVENT.EVENTID)).from(EVENT).fetch();
Run Code Online (Sandbox Code Playgroud)