2009-08-28 6 views
2

結果セットでbit_orを使用するmysqlクエリがあります。結果セットがない場合、bit_or関数は0を返します(これはmysqlのマニュアルの通りです)。例えばmysqlがbit_orで結果を返さないようにする

select n from t1 where a=1; 

行を返しません。例えば

select bit_or(n) from t1 where a=1; 

戻り値0

私が代わりにBIT_ORクエリから何の結果を返さないために最後のクエリを強制する必要があり、 (私が正しい呼び出しを知らないので、擬似コードで):

select bit_or(n) unless 0 from t1 where a=1; 

誰もが、私はこれを行うことができます方法を知っていますか? (明確化、私は、残念なことに変更することはできません外部プログラムの戻り値は0に "結果が必要です)。

答えて

3

あなたがそうのように、行外にnullcaseステートメントを使用することができます。

select 
    case 
     when bit_or(n) = 0 then null 
     else bit_or(n) 
    end 
from 
    t1 
where 
    a=1 

それとも、あなたが完全に行を無視したい場合は、having句でそれを行うことができます。

select 
    bit_or(n) 
from 
    t1 
where 
    a=1 
having 
    bit_or(n) <> 0 

having句は、集約カラム(sumまたはmaxなど)で基本的にwhereを実行するために使用されます。この場合、集計列はbit_orです。結果セットに追加の列がある場合は、where句の後、ただしhaving句の後ろにあるgroup byステートメントに含める必要があります。

bit_or(n)

は0

0
SELECT * 
FROM (
    SELECT BIT_OR(`n`) AS `bit` 
    FROM `t1` 
    WHERE `a` = 1 
) AS `bit` 
WHERE `bit` 
である場合には、第2の例では、行を返さないしつつ、第1実施例は、その行の nullが返され
関連する問題