2014-10-09 4 views
0

Я сделал новый столбец в моей таблице базы данных:НЕ РАВНО оператор = не работает, как ожидалось в Oracle

alter table TABLE add (COLUMN NUMBER(1)); 

Теперь я хочу, чтобы выбрать все записи, в которых значение столбца не равно нулю, либо это некоторое другое число пустых (NULL)

SELECT * FROM TABLE WHERE COLUMN != 0; 

И по умолчанию все столбцы имеют пустой/нулевое значение в этот столбец недавно добавил поэтому он должен вернуть все записи, но не возвращает какой-либо.

Но если изменить значение для этого столбца записи на 0 и выполнить ниже запрос, он работает нормально.

SELECT * FROM TABLE WHERE COLUMN = 0; 

Пожалуйста, помогите я хочу, чтобы выбрать все записи, в которых значение не 0.

+0

NULL нельзя сравнивать с операторами равенства, используйте IS –

ответ

5

Для NULL значений вы должны явно дать IS NULL или IS NOT NULL

SELECT * FROM TABLE WHERE COLUMN <> 0 OR COLUMN IS NULL; 

ИЛИ

SELECT * FROM TABLE WHERE NVL(COLUMN,1) <> 0 

Оптимизатор будет делать, как и в первом случае, даже если вы идете с NVL()

+0

Вы заявляете: «Оптимизатор собирается делать e в первом случае, даже если вы идете с NVL() ". Можете ли вы дать ссылку, подтверждающую это? Вы меня сомневаетесь, но я думаю, что это неправда. –

Смежные вопросы