【问题标题】:Jooq nested selectJooq 嵌套选择
【发布时间】:2016-05-22 11:21:55
【问题描述】:

这里是第一次 jooq 用户。我需要将下面带有嵌套选择的常规 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();

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    您想使用DSL.row() 构造函数来构造row value expression predicate

    以下是使用 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 中不允许聚合函数”
    • @RussJackson:介意问一个新的问题吗?我很乐意回答
    猜你喜欢
    • 2019-10-28
    • 2012-06-30
    • 2014-07-19
    • 2018-10-13
    • 2011-05-16
    • 2020-12-07
    • 2019-12-04
    • 1970-01-01
    • 2011-10-23
    相关资源
    最近更新 更多