sql SELECT возвращает значения, соответствующие NULL ИЛИ Другое значение - PullRequest
0 голосов
/ 15 марта 2012

Этот вопрос кажется очень простым, но я не могу найти ответ от Google, и я провел последний час тестирования без удачи.У меня возникли трудности при попытке вернуть набор строк.Я хочу, чтобы строки были равны 11, 1 или Null.Я думаю, что это Нуль, который меня портит.Ниже приведен только один из многих тестов, которые я провел ... и я знаю, что это не работает.Любая помощь очень ценится.Заранее спасибо

SELECT * FROM have
    WHERE have.flag = 11 || 1 || NULL;

Ответы [ 4 ]

4 голосов
/ 15 марта 2012

Вам нужно будет обработать NULL отдельно от 1 и 11, а затем просто поместить значения в предложение where.

SELECT *
FROM have AS h
WHERE h.flag IS NULL
   OR h.flag IN (1, 11);
1 голос
/ 15 марта 2012

Это объяснение:

SELECT * FROM have
    WHERE have.flag = 11 || 1 || NULL;

На самом деле вы заявляете:

(have.flag = 11) || 1       || NULL
true || 1                   || NULL
1                           || NULL
1


(have.flag = 11) || 1       || NULL
false || 1                  || NULL
1                           || NULL
1

Значение всегда будет равно 1.
= имеет более высокий приоритет, чем ||.
@ Адам Венгер ответил правильно.

1 голос
/ 15 марта 2012

В качестве альтернативы, вы можете перейти на

select * from have as h where
IFNULL(h.flag,1) in (1,11)
1 голос
/ 15 марта 2012

Как альтернатива:

SELECT *
FROM   have
WHERE  nullif(nullif(flag,1),11) IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...