2016-02-11 4 views
4

Первый пользователь jooq здесь. Мне нужно преобразовать обычный оператор SQL с вложенным выбором ниже в jooq. Любая идея, если я на правильном пути? Я ценю любую помощь.Jooq inested select

//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

Вы хотите использовать 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(); 
+0

Спасибо Lukas – hln98