[Seasar-user:20139] Re: 【DBFlute】 (Query)DerivedReferrerについて

kubo [E-MAIL ADDRESS DELETED]
2010年 9月 10日 (金) 15:46:37 JST


久保(jflute)です。

ご確認ありがとうございます。

例えば、基点テーブルが FOO で BAR が子テーブルのとき、
BAR を持っていない FOO が検索結果から外れてしまうので、
max() の結果に対して、null の場合に 0 にする関数をラップしたい、
ということでよろしいでしょうか?

 where FOO.FOO_COUNT >= (
         select max(BAR.BAR_COUNT)
           from BAR
          where BAR.FOO_ID = FOO.FOO_ID
       )

※売上データがFOO???参考までに当てはめて頂ければと

通常の (Specify)DerivedReferrer や ScalarSelect などでは、
それ自体が取得値なので、無い場合に null でもプログラム側で
なんとかすればいいのでそんなに問題にはなりませんが、
こうやってSQLの中で利用するときややこしい話になりますね。
そういう意味で、(Query)DerivedReferrer や ScalarCondition には
共通するような話かもしれません。
もともとSQLの有名なハマりどころなので、
そういう意味でもしっかり対応したいとは思いますが、
coalesce って DBMS 共通かなぁ...!?
もう少々、色々と考えます。

null のときに検索対象から外したい場合は、
null 演算で外れるよりも、別途(Query)DerivedReferrer などで
明示的に絞り込んだ方が良いと思うので、null の場合は固定で
0 でもいいかなとは思いますが、今の時点でそれはなかなか
できないので、オプションにする形を想像しています。

#
# 例外処理を埋め込んだ DBFlute-0.9.7.4-02-SNAPSHOT を
# 公開しました。
#

2010/9/10 金子 雄一 <[E-MAIL ADDRESS DELETED]>:
> 金子です。
>
> 一通り動かしてみましたが、
> 今のところ、予期した通りの動きです。
>
> が、肝心なことを忘れてました…。
> 子テーブルなので、必ずしも、レコードがあるわけでないのでした…。
>
> 業務的には、返品業務の実装をしています。
>
> で、現状、どの部分で、この機能を欲したかというと、
> 返品をする対象(つまり、売上データ)を検索検索する部分です。
>
> 基本的には、売上データを検索すればよいのですが、
> 全額返品している場合には、検索対象から外すという処理です。
>
> 返品そのものがない場合(たぶん、ほとんどが該当)は、
> 返品テーブルにデータがないので・・・・。
> という感じです。
>
> なので、CBの範疇かが、怪しいのですが、
> deriverの機能で、sum(),max(),min() 等ができるようになっていますが、
> ここに、coalesce関数をつける・つけないを選択できようには、ならないでしょ うか?
> ( coalesce(sum(ColB),0)とすれば、子テーブルのレコードがない場合は、0にな
> るので。ただし、そん座していない場合は、検索結果として取得できてはいけな
> い場合もあるかと思いますので、選択できればよいのかなと。coalesceの第2引
> 数をどう渡す?という問題もあるかと思いますので、実は、厳しいのかもしれま せんが・・・・。)
>
> CBの範疇や、DBFluteとしてのポリシーもあるかと思いますので、
> それを破らない範囲であれば、対応を検討していただけると、
> ありがたく思います。
>
>
> ご不明な点がありましたら、ご連絡ください。
> 以上、よろしくお願いいたします。
>
> (2010/09/10 6:21), kubo wrote:
>>
>> 久保(jflute)です。
>>
>> DBFlute-0.9.7.4-01-SNAPSHOTを使ってみて下さい。
>> (モジュール、ランタイム両方)
>>
>> まだ、各種例外処理が入っていないですが、
>> ColumnQueryの中で(Specify)DerivedReferrerが利用できます。
>> aliasName には固定で null を入れて下さい。
>>
>>> where
>>>  数字 = max(文字型カラム)
>>
>> これは、もともとの ColumnQuery でも、
>> コンパイルレベルでの抑制はできないので同じことかと。
>> 高度な機能に関しては、この辺は割り切りを入れています。
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
> --
> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
> 金子 雄一  Yuichi Kaneko
> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内