2017-10-12 41 views
1

我有一個包含10個奇數列的表,其中之一是「狀態」。不包含具有空值的列的子句

我想取其中狀態並不拒絕所有的行,所以我寫了下面的查詢上蜂巢:

select * from table1 where status <> 'Rejected' 

但是蜂房沒有返回我行,其中的狀態爲空。我改變了查詢

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

但我找不到任何文件來理解爲什麼會發生這種情況。

有人可以幫助我嗎?

+1

這就是NULL如何工作。它應該在描述所有數據庫的NULL值的文檔中。 –

回答

0

Hive實現了NULL安全比較運算符。所以,你可以這樣做:

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

至於你的問題,它是什麼NULL意味着在數據庫中一個非常基本的問題。這並不意味着「失蹤」,這意味着「未知」。當操作數爲NULL時,幾乎所有比較操作都會返回NULL - 例外是指定用於處理NULL值的操作數(如<=>is not nullis null)。

0

null不是一個值,它是缺乏的。無論何時您嘗試在值的上下文中使用它,結果都會「未知」。你可以這樣想 - 「是一個不同於'被拒絕'的未知(=空)值,我們不知道。」

因此,您需要專門處理它與is [not]運算符。您可以將您共享的第二個where條款想象爲「所有未知值爲'已拒絕'的狀態」。

相關問題