我有一个简单的查询来获取不是 hive 中的所有'RS'的所有类。我的数据如下所示
Account class
3000337430920208808 NULL
3000337394422514891 NULL
3000337317010916590 NULL
3000337153318453626 NULL
3000337129720896321 NULL
我写的查询为
select account_number,service_class from cdx_eligibility where account_number='3000337430920208808' and service_class not in ('RS');
我没有得到此帐户的输出。理想情况是NULL <> RS(因此它为true,应该返回记录)。但是我没有任何记录。我们是否需要以不同的方式处理NULL?我也尝试了几种选择(!=,<>,不在)。请提出建议。
最佳答案
这不是Hive的问题,而是SQL的工作方式。当您将'RS'与null
进行比较时,它不会返回任何内容,不是true或false。您也不能'foo' = null
。这就是为什么在字符字段中允许空值是一种痛苦的原因。如果必须具有空值,请使用where coalesce(service_class,'') not in ('RS')
。
这样,您就可以将一个空字符串与“RS”进行比较,这可以按您期望的那样工作。
关于sql - 即使满足条件,NULL值也不会作为查询的一部分出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402982/