Ho una query mysql che utilizza bit_or su un set di risultati. Quando non è impostato alcun risultato, la funzione bit_or restituisce 0 (questo è corretto secondo la documentazione di mysql).
Per esempio:
select n from t1 where a=1;
Non restituisce righe.
select bit_or(n) from t1 where a=1;
Restituisce 0
Devo forzare l'ultima query a non restituire invece alcun risultato dalla bit_or query, ad es. (in pseudo-codice, perché non conosco l'invocazione corretta):
select bit_or(n) unless 0 from t1 where a=1;
Qualcuno sa come posso fare questo? (Chiarimento, ho bisogno del valore di ritorno "nessun risultato su 0" per un programma esterno, che purtroppo non può essere modificato).
risposte:
3 per risposta № 1Puoi usare a case
dichiarazione a null
fuori la fila, in questo modo:
select
case
when bit_or(n) = 0 then null
else bit_or(n)
end
from
t1
where
a=1
Oppure, se vuoi ignorare completamente la riga, puoi farlo nel having
clausola:
select
bit_or(n)
from
t1
where
a=1
having
bit_or(n) <> 0
Il having
la clausola è usata essenzialmente per fare a where
su colonne aggregate (come a sum
o a max
). In questo caso, la colonna aggregata è a bit_or
. Se nel set di risultati sono presenti colonne aggiuntive, è necessario includerle nel file group by
dichiarazione dopo il where
clausola, ma prima del having
clausola.
Il primo esempio ritornerà null
per quella riga, mentre il secondo esempio non restituisce la riga if bit_or(n)
è 0.
0 per risposta № 2
SELECT *
FROM (
SELECT BIT_OR(`n`) AS `bit`
FROM `t1`
WHERE `a` = 1
) AS `bit`
WHERE `bit`