/ / Forza mysql per non restituire alcun risultato su bit_or - sql, mysql

Forza mysql per non restituire alcun risultato su bit_or - sql, mysql

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 № 1

Puoi 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`