Мы хотели бы интегрировать в запрос вычисленное поле. Это расчетное поле получается простым SELECT MAX(x) FROM table2
.Как использовать подзапрос в where where?
Но в нашем основном запросе, если мы хотим отфильтровать это вычисляемое поле, нам пришлось интегрировать его в предложение where.
Наша проблема заключается в интеграции подзапроса в состояние WHERE...IN
.
Мы стараемся использовать функцию Subqueries.in
, но проблема в том, что мы не можем ввести список значений.
Вот запрос SQL, который у нас был бы.
select
this_.DMDE_CEE_ID as y0_,
this_.DT_DMDE as y1_,
(select
max(this0__.STATUT) as y0_
from
CS_FC_DMDE_CEE this0__
where
this0__.DMDE_CEE_ID=this_.DMDE_CEE_ID limit 1) as y16_
from
xxx this_
where
(select
max(controleDemandeCee_.STATUT) as y0_
from
CS_FC_DMDE_CEE controleDemandeCee_
where
controleDemandeCee_.DMDE_CEE_ID=this_.DMDE_CEE_ID
) IN (3,5)
order by
this_.NOM_DOS asc,
this_.DT_DMDE asc limit 10;
Здесь лучший результат мы можем иметь:
select
this_.DMDE_CEE_ID as y0_,
this_.DT_DMDE as y1_,
(select
max(this0__.STATUT) as y0_
from
CS_FC_DMDE_CEE this0__
where
this0__.DMDE_CEE_ID=this_.DMDE_CEE_ID limit 1) as y16_
from
xxx this_
where
5 IN (select
max(controleDemandeCee_.STATUT) as y0_
from
CS_FC_DMDE_CEE controleDemandeCee_
where
controleDemandeCee_.DMDE_CEE_ID=this_.DMDE_CEE_ID
)
order by
this_.NOM_DOS asc,
this_.DT_DMDE asc limit 10;
код Java с критериями & подзапросов:
final DetachedCriteria dControleDemande = DetachedCriteria.forClass(ControleDemandeBean.class, CONTROLE);
dControleDemande.add(Restrictions.eqProperty(CONTROLE_DEMANDE_ID, DMD_ID));
dControleDemande.setProjection(Projections.max(CONTROLE + ".statut.id"));
cDmd.add(Subqueries.in(5L, dControleDemandeCee))
Мы не можем заменить 5л списком/массив Long ,
Любая идея? Спасибо
nb: мы должны использовать критерии. Клиент отказывается от родного языка HQL или SQL.