0

ここでは o/r マッピングに iBatis を使用していますが、これは間違いなく純粋な SQL の問題です。完全なコンテキストを提供するために、iBatis についてのみ言及します。

私はテーブルを持っていますitems..fruits:

fruit_id    fruit_name      fruit_color     fruit_cost
=====================================================
1           apple           red             12
2           pear            brown           70
3           apple           green           18
...
6485        banana          yellow          30
6486        plum            purple          <null>
6487        kiwi            green           85

注意してください:私の制御の及ばない理由により、fruit_costnull可能です。

テーブル内のすべての果物のコストを (名前で) 合計する iBatis SQL クエリがあります。

SELECT
    sum(item_cost) AS fruitSum
FROM
    items..fruits
WHERE
    fruit_name = #{value}#

ご覧のとおり、 に対してこのクエリを実行するappleと、返さfruitSumれる は 30 (12 + 18) になります。しかし、それを実行するとplumNULL が返されます (実際、私の完全なコードではnet.sf.cglib.beans.BulkBeanExceptions が返されますが、ここでは問題になりません)。

fruitSumクエリが null になる場合に強制的にゼロ (0) になるようにクエリに振りかけることができる SQL マジックがあるかどうか疑問に思っています。したがって、次のようなものです。

SELECT
    sum(item_cost) AS fruitSum DEFAULT 0
FROM
    items..fruits
WHERE
    fruit_name = #{value}#
4

2 に答える 2

3

これが標準 SQL の場合は、次を使用しますCOALESCE()

SELECT COALESCE(sum(item_cost), 0) AS fruitSum
FROM   items.fruits
WHERE  fruit_name = ...
于 2013-03-29T15:25:19.700 に答える
0
SELECT
    sum(NVL(item_cost, 0)) AS fruitSum
FROM
    items..fruits
WHERE
    fruit_name = #{value}#
于 2013-03-29T15:24:08.803 に答える