2016-08-29 20 views
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を拒否します。

答えて

0

あなたは

(select 
     max(controleDemandeCee_.STATUT) as y0_ 
     from 
      CS_FC_DMDE_CEE controleDemandeCee_ 
     where 
      controleDemandeCee_.DMDE_CEE_ID=this_.DMDE_CEE_ID 
) IN (5) 
のようなものをレンダリングするカスタム Criterionを実装することができ
関連する問題