开发者社区> 问答> 正文

flink sql 中值为null时结果都为 false是为什么?

在 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邮件归档

展开
收起
毛毛虫雨 2021-12-06 16:22:39 1924 0
1 条回答
写回答
取消 提交回答
  • 在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邮件归档

    2021-12-06 17:02:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载