Заставить mysql не возвращать результат на bit_or - PullRequest
2 голосов
/ 28 августа 2009

У меня есть запрос MySQL, который использует bit_or в наборе результатов. Когда нет набора результатов, функция bit_or возвращает 0 (это правильно в соответствии с документацией mysql).

Например:

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;

Кто-нибудь знает, как я могу это сделать? (Пояснение: мне нужно возвращаемое значение "no result on 0" для внешней программы, которое, к сожалению, изменить нельзя).

Ответы [ 2 ]

3 голосов
/ 28 августа 2009

Вы можете использовать оператор case для null вывода строки, например:

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 используется, по существу, для where в столбцах совокупности (например, sum или max). В этом случае ваш совокупный столбец - bit_or. Если у вас есть дополнительные столбцы в наборе результатов, вам нужно будет включить их в оператор group by после предложения where, но до предложения having.

Первый пример вернет null для этой строки, тогда как второй пример не вернет строку, если bit_or(n) равно 0.

0 голосов
/ 28 августа 2009
SELECT *
FROM (
    SELECT BIT_OR(`n`) AS `bit`
    FROM `t1`
    WHERE `a` = 1
) AS `bit`
WHERE `bit`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...