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

金子 雄一 [E-MAIL ADDRESS DELETED]
2010年 9月 10日 (金) 16:02:38 JST


金子です。

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

まさに、その通りです。


 > coalesce って DBMS 共通かなぁ...!?
SQL92の予約語(のはず)なので、DBMS共通と考えて、差支えないかと。


以上、よろしくお願いします。


(2010/09/10 15:46), kubo wrote:
> 久保(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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user


-- 
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
株式会社プラスサム
金子 雄一  Yuichi Kaneko
〒330-0854
埼玉県さいたま市大宮区桜木町2-7-4
プラスサムビル
Tel: 048-650-9777 Fax: 048-650-9778
E-mail : [E-MAIL ADDRESS DELETED]
http://www.plus-sum.co.jp/
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆


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