不在具有Null值的列的子句中

时间:2017-10-12 13:52:15

标签: sql hive hiveql

我有一个包含10个奇数列的表格,其中一个是'状态'。

我想获取Status未被拒绝的所有行,所以我在Hive上写了以下查询:

select * from table1 where status <> 'Rejected' 

然而,Hive并没有返回Status为Null的行。我将查询更改为

select * from table1 where status <> 'Rejected' or status is Null 

但是我无法找到任何文档来理解为什么会这样。

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

null不是价值,而是缺乏价值。每当您尝试在值的上下文中使用它时,结果将是“unkonwn”。你可以这样思考 - “是一个与'拒绝'不同的未知(= null)值吗?我们不知道。”

因此,您需要使用is [not]运算符专门处理它。您可以将您共享的第二个where子句视为“所有未知具有'拒绝'值的状态的所有状态。”

答案 1 :(得分:0)

Hive实现了NULL - 安全比较运算符。所以你可以这样做:

select *
from table1
where not status <=> 'Rejected' ;

关于你的问题,关于NULL在数据库中的含义,这是一个非常基本的问题。它并不意味着“失踪”,它意味着“未知”。当任一操作数为NULL时,几乎所有比较操作都返回NULL - 例外是特定设计的操作数(例如<=>is not nullis null)处理NULL值。