Oracle PL/SQL where condition:不等于0或null

Dyl*_*ski 2 plsql oracle-sqldeveloper

我选择的id地方不能等于0,值也不能(null).我写:

WHERE id IS NOT NULL (+) and id not in ('0')
Run Code Online (Sandbox Code Playgroud)

我有2个错误

错误(9,5):PL/SQL:忽略SQL语句

错误(38,119):PL/SQL:ORA-00933:SQL命令未正确结束我将其更改为:

WHERE id IS NOT NULL (+) and id is not ('0')  
Run Code Online (Sandbox Code Playgroud)

发生了相同的错误 我应该写什么作为WHERE条款?

kro*_*lko 7

您可以将条件简化为:

WHERE id != 0
Run Code Online (Sandbox Code Playgroud)

因为与NULL的比较(使用两个=或!=运算符)总是求值为NULL(在条件中将SQL视为"假"),
因此NULL!= 0总是求值为FALSE并且您可以在此条件下跳过此部分

WHRE id != 0 AND id IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

Braiam的回答Where nvl(Id,0)<>0虽然正确,但会阻止数据库在id列上使用索引,这可能会对执行产生不良影响.


Rah*_*hul 5

难道不应该吗

WHERE id IS NOT NULL
AND id != 0
Run Code Online (Sandbox Code Playgroud)


And*_*uze 5

(+)用于外连接.你应该写:

Where nvl(Id,0)<>0
Run Code Online (Sandbox Code Playgroud)