2009-08-28 5 views
2

J'ai une requête mysql qui utilise bit_or sur un jeu de résultats. Quand il n'y a pas de résultat, la fonction bit_or renvoie 0 (c'est correct selon la documentation mysql).Force mysql à retourner aucun résultat sur bit_ou

Par exemple:

select n from t1 where a=1; 

retourne aucune ligne.

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

retours 0

je dois forcer la dernière requête de revenir au lieu aucun résultat de la requête bit_or, par exemple (En pseudo-code, parce que je ne sais pas l'invocation correcte):

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

Est-ce que quelqu'un sait comment je peux le faire? (Clarification, j'ai besoin de la valeur de retour "aucun résultat sur 0" pour un programme externe, qui ne peut malheureusement pas être changé).

Répondre

3

Vous pouvez utiliser une instruction case à null sur la ligne, comme ceci:

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

Ou, si vous voulez ignorer complètement la ligne, vous pouvez le faire dans la clause having:

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

La clause having est utilisée pour effectuer essentiellement un where sur des colonnes agrégées (telles qu'un sum ou un max). Dans ce cas, votre colonne agrégée est bit_or. Si vous avez des colonnes supplémentaires dans votre jeu de résultats, vous devez les inclure dans l'instruction group by après la clause where, mais avant la clause having.

Le premier exemple retourne null pour cette ligne, alors que le second exemple ne retournera pas la ligne si bit_or(n) est 0.

0
SELECT * 
FROM (
    SELECT BIT_OR(`n`) AS `bit` 
    FROM `t1` 
    WHERE `a` = 1 
) AS `bit` 
WHERE `bit` 
Questions connexes