在 flink sql 中,如 SELECT * from order where product <> 'rubber',如果数据中的 product 字段值是 null, 是无法匹配 product <> 'rubber' 这个条件的,虽然 null 确实不等于 'rubber' 只有将条件改为 where product is Null or product <> 'rubber' 才能匹配。 但是我想要 null <> 'rubber' 的结果也为 True,且不想在条件之前加上 product is Null 的判断,可以怎么办呢?
*来自志愿者整理的flink邮件归档
在SQL标准里,bool表达式是有三种value的[1],分别是true、false、unknown。 而且null正常来讲是跟任何value都不相等的,包括另外一个null [2]。
所以如果执行SELECT null <> null
,返回结果应该unknown,在flink里,这个应该就是null,而不是true,或者false。 而如果在WHERE条件中出现这种情况的时候,比较的结果应该也是unknown[3],但是默认处理是按照false来处理的。
而IS [NOT] DISTINCT FROM
就是专门用来处理对null值的比较的场景的。因为它可以处理null,所以它的返回值 只会是true或者false,而不会是unknown。对于你这个场景来说,应该是最合适的。
*来自志愿者整理的flink邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。