sql—即使在满足条件之后,也不将空值作为查询的一部分

ggazkfy8  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(357)

我有一个简单的查询,以获得所有类,这是不是'的Hive'。我的数据如下

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');

我没有得到这个帐户的输出。理想情况下为空<>rs(因此为true,应该返回record)。但我没有任何记录。我们需要以不同的方式处理空值吗?我还尝试了几个选项(!=,<>,不在)。请建议。

uttx8gqw

uttx8gqw1#

看起来配置单元无法正确处理“in”子句的空值,此解决方法应该可以工作

select account_number,service_class from cdx_eligibility where   account_number='3000337430920208808' and (isnull(service_class ) or service_class not in ('RS'));
vh0rcniy

vh0rcniy2#

这不是配置单元问题,这是sql的工作方式。当你把rs和 null ,它不返回任何东西,不是真的或假的。你不能这么做 'foo' = null 任何一个。这就是为什么在字符字段中允许空值是一种痛苦的原因。如果必须有空值,则使用 where coalesce(service_class,'') not in ('RS') .
这样,您就可以将空字符串与“rs”进行比较,正如您所期望的那样。

相关问题