sql - 语句Oracle Sql中where子句中的空值
问题描述
我知道我不能简单地说 NULL 值等于某个整数等。但我想知道 NULL = 5 或类似的输出是什么。由于下面的代码,我不认为这是错误的。
select *
from hr.employees
where
NOT (
COMMISSION_PCT IN (.4,.3,.2,.25,.15,.35,.1)
)
我猜当commission_pct 为空时,它既不是真的也不是假的。在这些类型的问题中,处理空值的良好做法是什么?为了谨慎起见,我应该在每个非空列中使用类似下面的内容吗?
select *
from hr.employees
where
NOT (
NVL(COMMISSION_PCT,.99) IN (.4,.3,.2,.25,.15,.35,.1)
)
解决方案
添加比较NULL
:
SELECT *
FROM hr.employees
WHERE COMMISSION_PCT NOT IN (.4,.3,.2,.25,.15,.35,.1)
OR COMMISSION_PCT IS NULL;
如果您使用NVL
,那么 Oracle 将不会在列上使用索引(您需要使用基于函数的索引NVL(commission_pct, 0.99)
)。
推荐阅读
- python - 记录烧瓶应用程序
- unity3d - Unity - 关闭环境光不会让我的场景完全变黑
- f# - 如何使用命令行参数作为类型提供程序的参数?
- php - 如何使用 php 更新 psql 表?
- apache-kafka - org.apache.kafka.common.config.ConfigException:未知配置'errors.deadletterqueue.topic.name'
- c# - 在哪里可以找到 System.Memory 文档?
- python - 将对象保存在内存中并避免重新加载泡菜
- javascript - mp3 文件的 Google Picker ViewId
- python - 无法在 Windows 10 上的 python 3.6 64 位上运行 pyqt5(没有 anaconda 没有 virtualenv)
- sql - T-SQL 存储过程中带有 CTE 的 SELECT/UPDATE 是原子的吗?