0

2 つのフィールドが共通する 4 つのテーブルがあります。

total_share と idea_user_id

各テーブルの total_share の SUM から total_income を計算するクエリを作成しました。

これが私のクエリです

SELECT(
                         (SELECT SUM(total_share) FROM `idea_submitter_percentage` WHERE idea_user_id='3')
                           +
                         (SELECT SUM(total_share) FROM `idea_revisor_percentage` WHERE idea_user_id='3')
                           +
                         (SELECT SUM(total_share) FROM `idea_contributor_percentage` WHERE idea_user_id='3')
                            +
                         (SELECT SUM(total_share) FROM `idea_comparisor_percentage` WHERE idea_user_id='3')
                )
AS total_income

問題は、各テーブルに idea_user_id='3' の行が少なくとも 1 つある場合に正常に動作することです。

しかし、idea_user_id='3' に基づいてエントリが存在しないテーブルが 1 つある場合、NULL が返されます。したがって、total_income という名前の合計金額が NULL を返します。

どうすればこの問題を解決できますか

4

2 に答える 2

2

coalesce()null を処理するために使用できます。

select coalesce(sum(...), 0) ...

または、外側のクエリで合計を移動し、サブクエリですべてを結合することに固執することもできます。

select sum(...)
from ( select ... from ...
       union all
       select ... from ...
       ... ) as sub
...

すべてのテーブルに参加することもできます(juergenの回答)。

于 2013-06-30T12:19:25.207 に答える
0

このタイプの構文はオラクルで機能します...基本的に、外部結合が必要です。

    SELECT NVL(SUM(total_share),0) 
FROM `idea_comparisor_percentage` 
WHERE idea_user_id (+) ='3'
于 2013-06-30T12:19:03.450 に答える