2017-10-12 14 views
1

J'ai une table avec 10 colonnes impaires, l'une d'elles étant 'Status'.Pas dans la clause sur une colonne avec des valeurs nulles

Je voulais aller chercher toutes les lignes où le statut est pas rejetée, alors j'ai écrit la requête suivante sur Hive:

select * from table1 where status <> 'Rejected' 

Cependant Ruche me ne pas retourner les lignes où la situation était nulle. J'ai changé la requête en

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

Mais je ne trouve aucune documentation pour comprendre pourquoi cela se produit.

Quelqu'un peut-il m'aider s'il vous plaît avec ceci?

+1

C'est ainsi que 'NULL' fonctionne. Il devrait être dans la documentation qui décrit les valeurs 'NULL' pour toutes les bases de données. –

Répondre

0

Hive implémente l'opérateur de comparaison NULL -safe. Ainsi, vous pouvez faire:

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

Quant à votre question, il est une question assez basique sur ce NULL signifie dans les bases de données. Cela ne signifie pas "manquant", cela signifie "inconnu". Presque toutes les opérations de comparaison renvoient NULL lorsque l'un des opérandes est NULL - les exceptions sont les opérandes (tels que <=>, is not null et is null) qui sont spécifiques conçus pour gérer les valeurs NULL.

0

null n'est pas une valeur, c'est son absence. Chaque fois que vous essayez de l'utiliser dans un contexte de la valeur, le résultat serait "unkonwn". Vous pouvez y penser comme ceci - "est une valeur inconnue (= null) différente de" Rejeté "? Nous ne savons pas."

Ainsi, vous devez le gérer spécifiquement avec l'opérateur is [not]. Vous pouvez penser à la deuxième clause where que vous avez partagée comme "tous les statuts qui ne sont pas connus pour avoir la valeur" Rejeté "".