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

村上れお [E-MAIL ADDRESS DELETED]
2010年 7月 6日 (火) 23:22:39 JST


久保さん

こんばんは、uparrowです。

ご回答いただきありがとうございます。

> 現状は、OrScopeQuery内で明示的なANDを
> 利用するユーザインターフェースはありません。
こちら、了解いたしました。今回は外だしSQLで対応しようと思います。

> > DBFluteの場合関数は使えないため
> 細かいですが、勘違いする人が出て来てしまうので。
> DBFluteじゃなくて、"ConditionBeanの場合関数"
> の間違いですね。外だしSQLで関数は利用できます。
申し訳ございません。
外だしSQLで関数をとても使っておりました。。。

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

> OrScopeQuery内のANDパートの構築をできる
> インターフェースがあってもいいかなと思いますが、
> (ちょっと検討してみます)
ただ、このような機能があれば便利だと思いますので、
ご検討いただけると嬉しいです。

DBFluteの質問というか、根本的なDBの設計についての
質問となってしまい申し訳ございませんでした。

ありがとうございました。
よろしくお願いいたします。



> 久保(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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet




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