GBase 8a
性能调优
文章

在not in子查询中包含null值查询结果为空的特例场景

发表于2024-08-09 10:25:5934次浏览0个评论

在not in子查询中,如子查询结果集中包含有null值数据,则SQL执行结果为空,该场景为一个特例。

因为NULL 在 SQL 中表示未知或缺失的值,而 NULL 不能直接与其他值进行比较。当使用NOT IN与一个包含 NULL 的列表时。通常情况下(GBase 8a及大多数数据库如Oracle、MySQL、PostgreSQL 等)会返回空结果集,认为任何与 NULL的比较都是未知的,因此如果列表中存在 NULL,那么 NOT IN 将不会匹配任何行,即使那些行的值与列表中的非 NULL 值都不相同。

可以将这个场景作为个特例,在业务中应用时通过增加not null条件进行规避,如select c1,c2 from t1 where c1 not in(select c1 from t2)调整为select c1,c2 from t1 where c1 not in(select c1 from t2 where c1 is not null)。

如下为GBase 8a v9.5.3.27测试验证的样例:

评论

登录后才可以发表评论