2013-02-21 2 views

ответ

11

Любое сравнение с null ложна - = и <>, >, <, и так далее. Вы не можете использовать null в списке IN - он будет проигнорирован. Более того, два null s равны , а не, даже равные друг другу.

Чтобы получить аннулирует, вам нужно задать для них в явном виде, как это:

SELECT * FROM NAME WHERE FIRST IS NULL OR FIRST != '1' 
9

Любое сравнение с NULL возвращает NULL, что эквивалентно FALSE. Это истинное предзнаменование не равных.

Если вы хотите включить NULL значения, выполните одно из следующих действий:

where first <> '1' or first is null 

или

where coalesce(first, '<null>') <> '1' 
4

В Oracle, нуль не считается юридическое значение для выбора, если вы явно не просите это:

select * from name where (first != '1') or first is null 

Вы также можете использовать NVL (аналог слипаются):

select * from name where nvl(first,'0') != '1' 
2

Это правильно, потому что NULL не может сравниться ни с чем ....

Единственный вариант что у вас есть, чтобы включить проверку NULL в качестве или в команде

SELECT * FROM NAME WHERE FIRST!=1 OR FIRST IS NULL 

Согласно Oracle Documentation NULL определяется как значение не knownm или когда значение не осмысленный. Это единственная причина, по которой Oracle не рассматривает значение ZERO как NULL. Это просто FYI, аддон. Благодаря!