我有以下(对我来说有点复杂)MariaDB 10.6更新:
update survey_definition sd
join (select si.survey_def_id, si.status, si.end_date
from survey_instance si
where si.survey_def_id = ?1
and si.status not in (14)
order by si.end_date desc
limit 1) latest on sd.id = latest.survey_def_id
set sd.latest_result=latest.status,
sd.latest_survey_end_date=latest.end_date;
如何将其转化为jOOQ DSL? 有可能吗?
JOOQ版本:3.12.1
DSL文本:
dslContext.update(SURVEY_DEFINITION
.join(dslContext.select (SURVEY._INSTANCE.SURVEY_DEFINITION_ID, SURVEY_INSTANCE.STATUS, SURVEY_INSTANCE.END_TIME_MILLIS)
. from(SURVEY_INSTANCE) SelectJoinStep<Record3<String, ScanStatus, Long>>
. where(SURVEY_INSTANCE.SURVEY_DEFINITION_ID.eq(definitionId)) SelectConditionStep<Record3<Sting, ScanStatus, Long>>
. limit(1) SelectLimitPercentStep<Record3<Sting, ScanStatus, Long>>
.on (SURVEY_INSTANCE.ID.eq(SURVEY_DEFINITION.ID))
)
触发的.on()
:"Cannot resolve method 'on' in '"SelectLimitPercentStep'
".
UPD:我想出了以下解决方案:
final Table<Record3<String, ScanStatus, Long>> latest = dslContext
.select(SURVEY_INSTANCE.SURVEY_DEFINITION_ID, SURVEY_INSTANCE.STATUS, SURVEY_INSTANCE.END_TIME_MILLIS)
.from(SURVEY_INSTANCE)
.where(DSL.and(
SURVEY_INSTANCE.SURVEY_DEFINITION_ID.eq(definitionId),
SURVEY_INSTANCE.STATUS.notEqual(ScanStatus.DELETED))
)
.orderBy(SURVEY_INSTANCE.END_TIME_MILLIS.desc())
.limit(1)
.asTable("latest");
dslContext.update(SURVEY_DEFINITION
.join(latest)
.on(latest.field(SURVEY_INSTANCE.SURVEY_DEFINITION_ID).eq(SURVEY_DEFINITION.ID)))
.set(SURVEY_DEFINITION.LATEST_SCAN_STATUS, latest.field(SURVEY_INSTANCE.STATUS))
.where(SURVEY_DEFINITION.ID.eq(definitionId))
.execute();
感谢@LukasEder和@Vonc的帮助和 idea .