@DBFlute-0.8.8.1
@Java
> (DBFLUTE-410){Java}:
> 子テーブルの導出カラムで絞り込み(QueryDerivedReferrer)
あまり利用頻度は高くないと思われますが、定型的なDBアクセスです。
今まで「(Specify)DerivedReferrer」で子テーブル導出カラムを
取得し、そしてその値で並び替えをすることもできましたが、
絞り込むことはできませんでした。
【(Specify)DerivedReferrer】
http://d.hatena.ne.jp/jflute/20080625/1214329516
それは、ある意味「SQLの文法上の限界」だったのですが、
「(Specify)DerivedReferrer」とは独立した処理で実現することで
「子テーブル導出カラムで絞り込み」という目的を達成することができました。
この機能を「(Query)DerivedReferrer」と呼びます。
MemberCB cb = new MemberCB();
cb.query().setMemberStatusCode_Equal_Formalized();
cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
public void query(PurchaseCB subCB) {
subCB.specify().columnPurchasePrice();
subCB.query().setPaymentCompleteFlg_Equal_True();
}
}).greaterEqual(1800);
select dflocal.MEMBER_NAME as MEMBER_NAME, ...
from MEMBER dflocal
where dflocal.MEMBER_STATUS_CODE = 'FML'
and (select max(dfsublocal_0.PURCHASE_PRICE)
from PURCHASE dfsublocal_0
where dfsublocal_0.MEMBER_ID = dflocal.MEMBER_ID
and dfsublocal_0.PAYMENT_COMPLETE_FLG = 1
) >= 1800
詳しくは、ConditionBeanPlatinumTestをご覧下さい。
「子テーブル導出カラムで絞り込み(QueryDerivedReferrer)-Max」
ちなみに通称(会話などで)でどちらも「DerivedReferrer」と言うことから
(Specify)DerivedReferrerと(Query)DerivedReferrerというように
表記することがあります。
DBFluteは子テーブル(Referrer)に関しては、
上記機能だけでなく、LoadReferrerやExistsSubQueryなど
徹底したサポートをしています。