Я выбираю id, где оно не может быть равно 0, и значение не может быть (null). Я написал:

WHERE id IS NOT NULL (+) and id not in ('0')

У меня 2 ошибки

Ошибка (9,5): PL / SQL: оператор SQL игнорируется

Ошибка (38119): PL / SQL: ORA-00933: некорректное завершение команды SQL Я меняю ее на:

WHERE id IS NOT NULL (+) and id is not ('0')  

Произошли те же ошибки. Что я должен написать в качестве предложения WHERE?

2
Dylan Czenski 6 Янв 2016 в 00:50

3 ответа

Лучший ответ

Вы можете упростить условие до:

WHERE id != 0

Поскольку сравнение с NULL (с ​​использованием обоих операторов = или! =) всегда оценивается как NULL (что в SQL трактуется как «ложь» в условиях),
поэтому NULL! = 0 всегда оценивается как FALSE, и вы можете пропустить эту часть в этом условии

WHRE id != 0 AND id IS NOT NULL

Ответ Брайама Where nvl(Id,0)<>0, хотя и правильный, не позволит базе данных использовать индекс по столбцу id, и это может плохо повлиять на производительность.

7
krokodilko 6 Янв 2016 в 00:02

Не должно быть

WHERE id IS NOT NULL
AND id != 0
3
Rahul 5 Янв 2016 в 21:55

(+) предназначен для внешних соединений. Вы должны написать:

Where nvl(Id,0)<>0
5
Braiam 5 Янв 2016 в 21:56