避坑:Sql中 in 和not in中有null值的情况说明

目录
  • Sql中in和not in中有null值的情况
    • 1.not in 中包含null值的情况
    • 2.in 中包含null值的情况
  • mysql有默认值但是仍然插入null问题

Sql中in和not in中有null值的情况

1)in的逻辑规则是or not in 的逻辑规则是 and

2)判断null 的sql语句为 is not null 或者 is null

3)当遇到 null = null 的判断是时由于不符合null的判断规则,所以结果一定为flase

1.not in 中包含null值的情况

select  *
  from A
  where  A.name not  in 
    (select B.name
          from B )

在上面的not in的查询中如果B表的name字段存在空值时,不论何种情况上述语句的查询结果一定为空

2.in 中包含null值的情况

select  *
  from A
  where  A.name in 
    (select B.name
          from B )

在上面的 in 的查询中如果B表的name字段存在空值时,如果A表中存在name字段也存在空值,那么上述语句的查询结果中不会显示A表中的空值

mysql有默认值但是仍然插入null问题

今天发现项目中对应的某条记录某一列的值为null,但是针对这条记录这一列的值不应该为null。

检查代码发现是在插入的时候没有对这一列对应的成员变量赋值,即便数据库这一列有默认值,在插入到数据库时依然插入了null。

mysql 的默认值只有在insert语句中没有这个字段时才会生效,如果insert中有插入该字段而该字段取值又为null,null值将被插入到表中,默认值此时失效。

在mybatis开发中通常会直接插入一个表对象,表中所有字段都会插入,因此如果要设置默认值,应该在业务层写逻辑,而不能依赖mysql的default来设置默认值。

另外尽量保证对于数据库的新增应该使用动态的sql来进行操作,这样也能避免上面问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决mysql使用not in 包含null值的问题

    注意!!! select * from user where uid not in (a,b,c,null); 这个sql不回返回任何结果.要避免not in的list中出现null的情况. 另外: –如果null参与算术运算,则该算术表达式的值为null.(例如:+,-,*,/ 加减乘除) –如果null参与比较运算,则结果可视为false.(例如:>=,<=,<> 大于,小于,不等于) –如果null参与聚集运算,则聚集函数都置为null(使用isnull(字段,0)等方式可以

  • mysql查询条件not in 和 in的区别及原因说明

    先写一个SQL SELECT DISTINCT from_id FROM cod WHERE cod.from_id NOT IN (37, 56, 57) 今天在写SQL的时候,发现这个查的结果不全,少了NULL值的情况,not in 的时候竟然把null也排除了 用 in 的时候却没有包含null 感觉是mysql设计的不合理 因为一直认为in 和 not in 正好应该互补才是,就像这样查的应该是全部的一样: SELECT DISTINCT from_id FROM cod WHERE c

  • MySQL中常见的八种SQL错误用法示例

    前言 MySQL在2016年仍然保持强劲的数据库流行度增长趋势.越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移到MySQL上来.但也存在部分客户在使用MySQL数据库的过程中遇到一些比如响应时间慢,CPU打满等情况. 阿里云RDS专家服务团队帮助云上客户解决过很多紧急问题.现将<ApsaraDB专家诊断报告>中出现的部分常见SQL问题总结如下,供大家参考. 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方. 比如对于下面简单的语句

  • 避坑:Sql中 in 和not in中有null值的情况说明

    目录 Sql中in和not in中有null值的情况 1.not in 中包含null值的情况 2.in 中包含null值的情况 mysql有默认值但是仍然插入null问题 Sql中in和not in中有null值的情况 1)in的逻辑规则是or not in 的逻辑规则是 and 2)判断null 的sql语句为 is not null 或者 is null 3)当遇到 null = null 的判断是时由于不符合null的判断规则,所以结果一定为flase 1.not in 中包含null值

  • MySQL中对于NULL值的理解和使用教程

    NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西.不是这样的!例如,下列语句是完全不同的: mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (""); 两个语句把值插入到phone列,但是第一个插入一个NULL值而第二个插入一个空字符串.第一个的含义可以认为是"电话号码不

  • SQL 复合查询条件(AND,OR,NOT)对NULL值的处理方法

    NULL值影响查询条件的结果,并且结果很微妙. 以下是SQL中AND,OR,NOT的真值表. 表1    AND的真值表 TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL                                               表2    OR的真值表 TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE F

  • 解决Go语言数据库中null值的问题

    本文主要介绍如何使用go语言database/sql库从数据库中读取null值的问题,以及如何向数据库中插入null值.本文在这里使用的是sql.NullString, sql.NullInt64, sql.NullFloat64等结构体,为了方便书写,它们的泛指我会使用sql.Null***来表示 要点 从数据库读取可能为null值得值时,可以选择使用sql.NULL***来读取:或者使用IFNULL.COALESCE等命令让数据库查询值返回不为""或者NULL 若需要往数据库中插入

  • SpringBoot项目中处理返回json的null值(springboot项目为例)

    在后端数据接口项目开发中,经常遇到返回的数据中有null值,导致前端需要进行判断处理,否则容易出现undefined的情况,如何便捷的将null值转换为空字符串? 以SpringBoot项目为例,SSM同理. 1.新建配置类(JsonConfig.java) import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.f

  • 关于Mybatis动态sql中test的坑点总结

    目录 总结Mybatis动态sql中test的坑 判断相等的注意点 判断字符是否相等 动态sql标签的小陷阱 下面先举个正常的例子 总结Mybatis动态sql中test的坑 在mybatis中要实现动态sql,重要方式就是使用test,通过其中表达式返回的true.false来达到动态sql的拼接.随着业务的复杂,test中的判断将会越来越复杂,所以熟悉test中细节处理对动态sql来说尤为重要. 判断相等的注意点 == 少打一个= 现在我们有一个Integer类型的参数typeId,需要当t

  • Vxe-Table开发中的各种坑以及避坑指南

    目录 背景: 开发阶段遇到的各种问题 全局size的问题 按钮的问题 合并单元格的问题 reload和load的问题 总结 背景: 由于公司要开发erp,采用了element-plus做为UI基础框架,但是回想往事点点滴滴,element-ui表格的种种表现令人痛心,于是跟leader商量之后决定使用Vxe-Table做表格插件,虽然element-plus在表格上也在大力优化,但就目前来看可用度确实不高,刚出了一个虚拟滚动,但看上去确实让人有点心急... 开发阶段遇到的各种问题 全局size的

  • MyBatis一级缓存避坑完全指南

    一级缓存概念 当我们使用Mybatis进行数据库的操作时候,会创建一个SqlSession来进行一次数据库的会话,会话结束则关闭SqlSession对象.那么一个SqlSession的生命周期即对应于Mybatis的一次会话.在Mybatis的一次会话中,我们很有可能多次查询完全相同的sql语句,如果不采取措施的话,每一次查询都查询一次数据库.而一次会话时间一般都是极短的,相同Sql的查询结果极有可能完全相同.由于查询数据库代价是比较大的,这会导致系统的资源浪费. 为了解决这个问题,Mybati

  • .NET+PostgreSQL实践与避坑指南(推荐)

    简介 .NET+PostgreSQL(简称PG)这个组合我已经用了蛮长的一段时间,感觉还是挺不错的.不过大多数人说起.NET平台,还是会想起跟它"原汁原味"配套的Microsoft SQL Server(简称MSSQL),其实没有MSSQL也没有任何问题,甚至没有Windows Server都没问题,谁说用.NET就一定要上微软全家桶?这都什么年代了-- PG和MSSQL的具体比较我就不详细展开了,自行搜一下,这种比较分析文章很多.应该说两个RDBMS各有特色,MSSQL工具集庞大(大

  • Linux下安装Python3.6及避坑指南

    Python3的安装 1.安装依赖环境 Python3在安装的过程中可能会用到各种依赖库,所以在正式安装Python3之前,需要将这些依赖库先行安装好. yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2. 下载Python3源代码 下载Python3的

随机推荐