mysql由于null导致查询异常

mysql由于null导致查询异常

场景

使用not in查询不符合预期

mysql版本

10.1.9-MariaDB(对应mysql 5.6)

http://qiniu.zh-noone.cn/mariadb%E4%B8%8Emysql%E7%89%88%E6%9C%AC%E5%AF%B9%E5%BA%94%E5%85%B3%E7%B3%BB.png

表数据

test1

id f_a f_b
1 1 1
2 2 2
3 3

问题

通过not in 查询不出来预期结果,比如下面语句把f_a>2的记录排除掉,预期是得到第1、2条记录,但是实际上查询结果是空

select
  *
from
  test1
where
  f_b not in (
    select
      f_b
    from
      test1
    where
      f_a > 2
  )

下面拆分子查询都是能查询指定结果的可以出结果的

SELECT
    f_b 
FROM
    test1 
WHERE
    f_a > 2
select
  *
from
  test1
where
  f_b in (1, 2)

原因

not in null查询异常,目前发现5.7.18没该问题

解决方案

添加not null 条件

select
  *
from
  test1
where
  f_b not in (
    select
      f_b
    from
      test1
    where
      f_a > 2
      and f_b is not null
  )

本文作者:朝圣

本文链接:www.zh-noone.cn/2022/11/mysql由于null导致查询异常

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

Python单测各种模拟的使用
0 条评论