[Seasar-user:8631] Re: [DBFlute 0.4.6] 子テーブルの項目に対する条件指定について
kubo
[E-MAIL ADDRESS DELETED]
2007年 6月 25日 (月) 11:46:18 JST
久保です。
> 子テーブル以下の項目に対して条件設定やorder byを使いたい場合についての
> 質問があります。
>
> 子テーブルの項目を使ってorder byを使用することは可能でしょうか?
>
> バージョンは、まだ0.4.6を使ってしまっています。
> (以前質問させていただいたときに最新のSNAPSHOTを用意していただいていたのですが、
> まだ移行しておりません。申し訳ありません。)
>
> 現在やろうとしていることとして、
> DBFluteのConditionBean,ConditionQueryを使って
> 子テーブルの項目を条件とした検索処理を行ないたいと考えております。
>
> そこでソースコードを下記のように書いてみました。
> 以下の条件、ソートを設定し、検索結果を取得しようとしています。
> ・孫テーブル1のVALUEという列が「aiueo」
> ・子テーブルのAAA_DATETIME列が2000/1/1 09:00:00〜2000/2/2 09:30:00
> ・孫テーブル2のVERSION_NO昇順、子テーブルのDISPLARY_ORDERの昇順でソート
まず、「子テーブル以下の項目に対して条件設定やorder byを使いたい場合」
というのは、以下のようなことでしょうか?
Aaa(親) -- Bbb(子)
select ...
from Aaa left outer join Bbb
where ...
order by Aaa.xxx, Bbb.bbb
上記のように、「親 left outer join 子」の検索における話になりますでしょうか?
もし、そのような場合は、「親 left outer join 子」というのは
結果一覧の“レコード単位”がどのテーブルとも一致しませんので、
そもそもConditionBeanでは実現ができません。
(BehaviorのloadXxx()を使えば表現できますが、それはSQL1発ではないです)
> 実行してみたところ以下のようなSQLが出力されました。
> select (省略)
> from hoge
> where hoge.uid in (
> select (省略)
> from hoge_child
> where hoge_child.apply_datetime >= '2000-01-01 09.00.00'
> and hoge_child.apply_datetime <= '2000-02-02 09.30.00'
> and hoge_child.uid in (
> select (省略)
> from hoge_grand_child1
> where hoge_grand_child1.value = 'aiueo')
> and hogeChild.uid in (
> select (省略)
> from hoge_grand_child2 )
> )
>
> 指定したorder by句が出力されていないようでした。
これは、「絞込みのための副問い合わせ内ではOrderByは不要」なので
出力していません。また、DBによってはSQLExceptionになるかと思います。
Seasar-user メーリングリストの案内