3
クエリに計算フィールドを統合したいと考えています。 この計算フィールドは単純なSELECT MAX(x) FROM table2
で得られます。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))
我々はロングのリスト/配列によって5Lを置き換えることはできません。
ありがとう
nb:基準を使用する必要があります。クライアントはネイティブのHQLまたはSQLを拒否します。