/ / Wymuś mysql, aby nie zwracał wyniku na bit_or - sql, mysql

Wymuś mysql, aby nie zwracał wyniku na bit_or - sql, mysql

Mam kwerendę mysql, który używa bit_or na zestaw wyników. Gdy nie ma zestawu wyników, funkcja bit_or zwraca 0 (jest to poprawne zgodnie z dokumentacją mysql).

Na przykład:

select n from t1 where a=1;

Zwraca żadnych wierszy.

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

Zwraca 0

Potrzebuję wymusić ostatnie zapytanie, aby zamiast tego nie zwracać wyniku z zapytania bit_or, np. (w pseudokodzie, ponieważ nie znam prawidłowego wywołania):

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

Czy ktoś wie, jak mogę to zrobić? (Wyjaśnienie, potrzebuję wartości zwrotnej "brak wyniku na 0" dla zewnętrznego programu, którego niestety nie można zmienić).

Odpowiedzi:

3 dla odpowiedzi № 1

Możesz użyć a case oświadczenie do null z rzędu, tak jak poniżej:

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

Lub, jeśli chcesz całkowicie zignorować wiersz, możesz to zrobić w having klauzula:

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

The having Klauzula służy zasadniczo do wykonania where na kolumnach zbiorczych (takich jak sum lub max). W takim przypadku Twoja kolumna agregująca ma wartość bit_or. Jeśli masz dodatkowe kolumny w zestawie wyników, musisz je uwzględnić w group by oświadczenie po where Klauzula, ale przed having klauzula.

Pierwszy przykład powróci null dla tego rzędu, podczas gdy drugi przykład nie zwróci wiersza, jeśli bit_or(n) to 0.


0 dla odpowiedzi nr 2
SELECT *
FROM (
SELECT BIT_OR(`n`) AS `bit`
FROM `t1`
WHERE `a` = 1
) AS `bit`
WHERE `bit`