美文网首页
MySQL NOT IN的坑——注意null

MySQL NOT IN的坑——注意null

作者: lsyarn | 来源:发表于2019-02-15 10:43 被阅读0次

近日在使用mysql的not in查询时遇到了一个问题,本来应该有的数据查出来为空。运行的sql如下

select name from table1 where name not in (select name from table2);

对table说明一下,有一些name存在于table1但是不存在于table2。例如
table1包含:

小明
小红

table2包含:

小明
大雄

期望的查询结果应该包含小红,但是查询结果却是!!!
经过一番google,发现原因是table2的name字段包含了null值。使用如下sql可以他到预期效果:

select name from table1 where name not in (
  select name from table2 where name is not null
);

为什么呢?
原因是not in的实现原理是,对每一个table1.name和每一个table2.name(括号内的查询结果)进行不相等比较(!=)。

foreach name in table2:
    if table1.name != name:
        continue
    else:
        return false
return true

而sql中任意!=null的运算结果都是false,所以如果table2中存在一个nullnot in的查询永远都会返回false,即查询结果为空。

相关文章

  • 瞎琢磨先生のJava笔记之MySQL中常见的坑

    MySQL中常见的坑 空字符串、NULL以及'NULL'的异同 [注意事项]在写 SQL 的过程中,时刻注意 "空...

  • MySQL NOT IN的坑——注意null

    近日在使用mysql的not in查询时遇到了一个问题,本来应该有的数据查出来为空。运行的sql如下 对table...

  • 数据库

    • MySQL 索引使用的注意事项 MySQL 索引使用的注意事项 索引不会包含有NULL值的列使用短索引...

  • mysql中!=的坑

    sql是脚本语言,容错性高,一不注意就踩坑。例如,如果某条记录的state是null,下面语句是不成立的,null...

  • sql空值替换

    mysql: ifnull(1/0, 'null') oracle: nvl(1/0,'null') sqlser...

  • mysql a!=null vs a is not null

    NULL 用于表示缺失的值或遗漏的未知数据,不是某种具体类型的值。数据表中的 NULL 值表示该值所处的字段为空,...

  • mysql null

    mysql创建表时,字段不特别指明不为空,默认为NULL。 如果某个字段允许NULL,插入数据时,没有插入这个字段...

  • 知识点储备(面试问题概要)

    注意:后续添加详细 MySQL 连接池及常用配置,存储引擎的类型,各自的特性,存储方式,怎么做数据恢复,null值...

  • 2018-05-14

    /*** * 特别注意: null+"" 的结果是 "null",不等于 null * * 如果把""null"当...

  • js中null和undefined

    老哥们要注意点 null !== undefind null == undefind

网友评论

      本文标题:MySQL NOT IN的坑——注意null

      本文链接:https://www.haomeiwen.com/subject/xyfpeqtx.html