1、对于in predicate来说,如果in后面所包含的集合中包含null的话,属于正常的sql,不应该报错。下面两个语句应该都返回Empty Set。 mysql和oracle都返回Empty Set。
mysql> select * from (select 1)a where 1 in (null,2);
ERROR 1064 (HY000): Unexpected exception: null
mysql> select * from (select 1)a where 1 not in (null,2);
ERROR 1064 (HY000): Unexpected exception: null
2、另外in subquery子查询改写时,需要支持null_aware_anti_join, 否则not in subquery改写成anti join的话,假设subquery中包含null的话,doris的子查询改写输出的结果可能是错的(null aware anti join需要对null值特殊处理,原因同1)。
下面的sql应该返回empty set。mysql和oracle都返回Empty Set。
mysql> select * from (select 2 as a)t where t.a not in (select a from (select 1 as a union select null as a)t2);
+------+
| a |
+------+
| 2 |
+------+
1 row in set (0.03 sec)
暂无答案!
目前还没有任何答案,快来回答吧!