[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 メーリングリストの案内