こんな感じです。
MemberCB cb = new MemberCB();
cb.setupSelect_MemberStatus();
cb.query().setMemberStatusCode_Equal_Provisional();
cb.union(new UnionQuery<MemberCB>() {
public void query(MemberCB unionCB) {
unionCB.query().setMemberName_PrefixSearch("St");
}
});
cb.query().addOrderBy_MemberName_Desc();
<OR句の代替>
OR句の代替として利用できます。
最新DBでは気を利かせてくれることもありますが、
基本的にはORはUNIONにした方がINDEXの利用の点で優位です。
(そいういうこともあり、CBは必ずORをUNIONで代替します)
<UNION ALL>
cb.unionAll()で「union all」になります。
条件的に重複がないことがわかっているなら
こっちの方が良いです。
(union結果の重複の消し込み処理をしないため)
<結合取得(setupSelect)の指定>
cb.setupSelect_Xxx();
は、自動でUnion側のCBに伝達されますので、
UnionQueryのCBでは指定する必要はありません。
(Select句は完全に一致させなければならないのですし)
<フォーマット>
UnionしてもCBで発行されるSQLはしっかり整形されてます。
以下のような感じでログに出力されます。
select dflocal.MEMBER_ID as MEMBER_ID, ...(略)
from MEMBER dflocal
left outer join MEMBER_STATUS dfrelation_0 on ...(略)
where dflocal.MEMBER_STATUS_CODE = 'PRV'
union
select dflocal.MEMBER_ID as MEMBER_ID, ...
from MEMBER dflocal
left outer join MEMBER_STATUS dfrelation_0 on ...(略)
where dflocal.MEMBER_NAME like 'St%'
order by MEMBER_NAME desc