Jooq嵌套查询

7

我是第一次使用jooq。我需要将下面带有嵌套select的常规SQL语句转换为jooq。不知道我是否正确,感谢任何帮助。

//select * 
//from profile 
//where (profile_id, effective_date) in (
//                select profile_id, max(effective_date) as date 
//                from profile 
//                group by profile_id
//                )

这是我所拥有的,但不确定是否正确:

Result<Record> profiles = dsl_
.select(PROFILE.fields())
.from(PROFILE)
.where(PROFILE.PROFILE_ID, PROFILE.EFFECTIVE_DATE) in (create
    .select(PROFILE.PROFILE_ID, max(PROFILE.EFFECTIVE_DATE) as date
    .from(PROFILE)
    .groupBy(PROFILE.PROFILE_ID)))
    .fetch();
1个回答

5
您想使用DSL.row()构造函数来构造一个行值表达式谓词

以下是使用jOOQ的方法:
// Assuming this:
import static org.jooq.impl.DSL.*;

// Write
Result<Record> profiles = dsl_
.select(PROFILE.fields())
.from(PROFILE)
.where(row(PROFILE.PROFILE_ID, PROFILE.EFFECTIVE_DATE).in(
     select(PROFILE.PROFILE_ID, max(PROFILE.EFFECTIVE_DATE).as("date"))
    .from(PROFILE)
    .groupBy(PROFILE.PROFILE_ID)
))
.fetch();

当我尝试类似上述操作(使用Postgres)时,会出现“错误:不允许在WHERE中使用聚合函数”的提示。 - Russ Jackson
@RussJackson:能否提出一个带有详细信息的新问题?我很乐意回答。 - Lukas Eder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接