[seasar-dotnet:1765] Re: [DBFlute.NET]OrScopeQuery内のAND

kubo [E-MAIL ADDRESS DELETED]
2010年 7月 6日 (火) 22:24:37 JST


久保(jflute)です。

uparrowさん、こんばんは

現状は、OrScopeQuery内で明示的なANDを
利用するユーザインターフェースはありません。
LikeSearchOptionのAsOrSplit(C#版にはないですが)、
OracleのInScope1000件対応とかでは内部的に対応。

OrScopeQuery内のANDパートの構築をできる
インターフェースがあってもいいかなと思いますが、
(ちょっと検討してみます)
今回のような条件は非常に特殊なので、どのみち
外だしSQLで書いて、実行計画などを厳密に管理する
方が良いような気もします。
(なぜ、分岐で検索カラムを変えてるのか、
などのコメントもSQL上に残すためにも)

> DBFluteの場合関数は使えないため
細かいですが、勘違いする人が出て来てしまうので。
DBFluteじゃなくて、"ConditionBeanの場合関数"
の間違いですね。外だしSQLで関数は利用できます。

> HOGEテーブル内に
> TOKUISAKI1
> TOKUISAKI2
> TOKUISAKI_KBN
> SHIIRESAKI1
> SHIIRESAKI2
> SHIIRESAKI_KBN
あと、DB構造について、念のためのコメントですが、
ここにある情報だけでは、TOKUISAKI_KBNがなんのために
あるのかわからないのですが、もし、"メインの得意先"、
というようなものを表すのであれば、メインの得意先を
示すカラム、もしくは、one-to-manyのテーブルを作ったりなど、
パフォーマンスのことを考えても、そもそもこういった条件が
発生しないような構造にすることをお奨めします。
(他の意味を持つものであっても、できる限り分岐がなくなるように)
検索条件用のカラムを別途用意するというのも選択肢の一つです。

2010/7/6  <[E-MAIL ADDRESS DELETED]>:
> uparrowと申します。
>
> OrScopeQueryについてご質問がございます。
>
> HOGEテーブル内に
> TOKUISAKI1
> TOKUISAKI2
> TOKUISAKI_KBN
> SHIIRESAKI1
> SHIIRESAKI2
> SHIIRESAKI_KBN
>
> のようなカラムがあります。
> 区分には1,2のいずれかが入っており、
> 区分が1ならTOKUISAKI1、SHIIRESAKI1の条件を使って
> 情報を取得するような場面があります。
>
> いままではこのような書き方で抽出しておりました。
> DECODE( TOKUISAKI_KBN, '1', TOKUISAKI1, '2', TOKUISAKI2 ) = 'HOGEHOGE'
> AND
> DECODE( SHIIRESAKI_KBN, '1', SHIIRESAKI1, '2', SHIIRESAKI2 ) = 'PIYOPIYO'
>
> DBFluteの場合関数は使えないため
>
> (
>  ( TOKUISAKI_KBN = '1' and TOKUISAKI1 = 'HOGEHOGE' )
>  or
>  ( TOKUISAKI_KBN = '2' and TOKUISAKI2 = 'HOGEHOGE' )
> )
> and
> (
>  ( TOKUISAKI_KBN = '1' and TOKUISAKI1 = 'HOGEHOGE' )
>  or
>  ( TOKUISAKI_KBN = '2' and TOKUISAKI2 = 'HOGEHOGE' )
> )
> のような文を考えたのですが、OrScopeQuery内でのAND条件は記載できるのでしょうか?
>
> 外出しSQLで書けば今までと同じように行う。
> または、条件の部分が長くなってしまうがunionを用いる。
> となるのでしょうか。
>
> 以上、よろしくお願いいたします。
> --
>  <[E-MAIL ADDRESS DELETED]>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内