SQL中的in、not in语句遇到null时的坑点

2023-10-27

背景介绍

前两天做问题排查的时候,写了一条sql,但是并没有如期地查到数据(确实是有数据的),SQL如下:

SELECT tar.*
 FROM tb_account_relation tar
 WHERE  tar.customer_id 
 NOT IN (
 SELECT customer_id
 FROM TB_SMS_SEND_DETAIL
 WHERE  TYPE = '2'
 )

简化了一下,就是先执行子查询,然后把子查询的结果作为筛选条件,单独执行子查询,部分结果如下:
在这里插入图片描述
按说,执行整体SQL也是可以查询到数据的,因为根据客户ID,查询客户信息,肯定是可以查到的,但是结果是什么都没有查询到。

问题解决

手动建立demo数据表,整体数据如下:
在这里插入图片描述

  • 案例一:in遇上null
select * from class_mate where class in (null,'1')

结果:
在这里插入图片描述
结论1:in语句中不会对null值进行匹配,即查询不到null值记录

  • 案例二:not in独行
select b.* from class_mate b where b.class not in ('1','2')

结果:
在这里插入图片描述
结论2:not in 语句不会对null值进行匹配,即查询不到null值记录

  • 案例三:not in 遇上null
select b.* from class_mate b where b.class not in ('1','2',null)

结果:
在这里插入图片描述
结论:查询无效,不会查询到任何结果,且SQL语句正常执行不会报错。

总结
  • null值真是个神奇的玩意儿
  • in语句不会对null进行过滤匹配
  • not in语句后面的范围不能出现null,否则执行无效,如果后面是子查询,则需要手动增加is not null过滤条件,如:
SELECT tar.*
FROM tb_account_relation tar
WHERE  tar.customer_id 
NOT IN (
SELECT customer_id
FROM TB_SMS_SEND_DETAIL
WHERE  TYPE = '2' and  customer_id is not null
)

参考:sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL中的in、not in语句遇到null时的坑点 的相关文章

  • Preg_replace() 删除除查询结尾之外的所有内容

    首先 为我糟糕的英语感到抱歉 我有这样的疑问 SELECT t1 SELECT COUNT FROM table a t2 WHERE t1 id t2 id c AND t2 status 1 AS aula FROM table c t
  • SQL Server 2008 R2 的 Try_Convert

    我正在使用 SQL Server 2008 R2 并且有一个VARCHAR我想要转换为的列DECIMAL 28 10 using CONVERT 但其中许多行的格式错误 因此无法将它们解析为数字 在这种情况下 我只想通过将结果设置为 0 或
  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • 使用唯一索引删除重复项

    我在两个表字段 A B C D 之间插入 相信我已经在 A B C D 上创建了唯一索引以防止重复 然而我以某种方式简单地对这些做了一个正常的索引 因此插入了重复项 这是2000万条记录的表 如果我将现有索引从普通索引更改为唯一索引 或者只
  • 插入后用触发器更新多行(sql server)

    我有一个表 orderDetails 包含订单的产品 产品编号 color size quantity 和一个表库存 产品编号 size color stock 订单完成后 我使用此查询将项目插入表中orderDetails INSERT
  • 是什么阻止“Select top 1 * from TableName with (nolock)”返回结果?

    我目前正在运行以下语句 select into adhoc san savedi from dps san savedi record 这花了很长时间 我想看看它走了多远 所以我运行了这个 select count from adhoc s
  • 为什么此 SQL 更新失败(“列名无效”)?

    我有一个 SQL Server CE 表 如下所示 我正在尝试像这样更新其唯一记录 update workTables set fileType INV 但我得到 Why UPDATE 请查看相关问题here https stackover
  • 通过货币换算获取每种产品类型的最低价格

    我想选择每种产品类型中最便宜的 包括运费 价格转换为当地货币 最便宜 产品 价格 产品 运费 seller to aud 我的数据库有如下表 PRODUCTS SELLERS id type id seller id price shipp
  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • 创建表作为 select 删除 postgresql 中的非空约束

    在 postgres sql 中 创建表时 select 删除了表上的非空约束 例如 对此没有单一命令的解决方案 要基于现有表 包括所有约束 创建表 请使用 create table B like a including constrain
  • 在 MacOSX10.6 上运行 python 服务器时 MySQLdb 错误

    运行我的服务器 python manage py runserver 产生以下错误 django core exceptions ImproperlyConfigured 加载 MySQLdb 模块时出错 没有名为 MySQLdb 的模块
  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 如何在 sqlalchemy 中创建基于文字的查询?

    我创建了一个函数来创建表达式 def test operator1 operation operator2 return literal column operator1 op operation operator2 现在当我用 test
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • Mysql innoDB 不断崩溃[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的数据库 mysql 服务器不断崩溃 重新启动 我不知道该怎么办 我不断在 dbname org err 文件中收到以下内容 13120
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • 为什么 MySQL 创建带有 _seq 后缀的表?

    我创建了一个 InnoDB 表 名为foo在 MySQL 中 一旦我对表执行插入操作 我就会看到另一个表foo seq被建造 如果我删除自动生成的表 它会在下一次插入后出现 是什么原因造成的 听起来像是正在创建一个序列 您是否有自动生成的主
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List

随机推荐

  • Vue3的Teleport是什么?

    首先 Vue3的Teleport是一种魔法般的功能 它可以让你的组件瞬间移动到另一个位置 就像是现实生活中的瞬间传送器一样 但是它只适用于Vue3哦 你可能会想 这不是和Vue2的插槽差不多吗 NO NO NO 你可错了 Teleport和
  • JavaScript中的异步编程

    当我们在编写JavaScript代码时 经常会遇到需要执行长时间运行的任务的情况 例如从服务器获取数据或进行复杂的计算 在这些情况下 我们不希望阻塞用户界面 因为这会使网站看起来卡顿 甚至无响应 为了避免这种情况 我们需要使用JavaScr
  • js正则验证大全(你想要的这里都有)

    原文地址 https w55776 blog csdn net article details 125967169 去除html标签使用场景 不去除的样式展示 this stationList data map item gt const
  • 若干经典基础算法题目练习

    练习1 判断是否为素数 ConsoleAppIsPrime1 cpp 定义控制台应用程序的入口点 函数功能 判断一个输入的数是否为素数 函数原形 bool Prime int x 参数 int x 将要判断的数 返回值 bool型变量 判断
  • MySQL错误日志(Error Log)详解

    错误日志 Error Log 是 MySQL 中最常用的一种日志 主要记录 MySQL 服务器启动和停止过程中的信息 服务器在运行过程中发生的故障和异常情况等 作为初学者 要学会利用错误日志来定位问题 下面介绍如何操作查看错误日志 启动和设
  • RabbitMQ消息转换器

    文章目录 RabbitMQ消息转换器 RabbitMQ消息转换器 在SpringAMQP的发送方法中 发送消息和接受消息的类型都是Object 也就是说 我们可以发送任意对象类型的消息 SpringAMQP都会帮我们把发送的消息序列化为字节
  • 爬虫的学习总结

    这里是我对最近几次课程的爬虫学习总结 1 学习了Python的爬虫原理 在此基础上安装了urllib requests BeautifulSoup等库 并学习了基本语法 为后续爬虫作业打下基础 2 完成第一次课上练习 对天气的爬取 巩固知识
  • k8s-多节点部署efk-dial tcp 172.20.2.134:5601: getsockopt: connection refused

    异常信息 Error dial tcp 172 20 0 145 5601 getsockopt connection refused Trying to reach http 172 20 0 145 5601 分析 部署好efk后 通过
  • An error occurred during installation: No such plugin: cloudbees-folder

    在启动jenkins时候报错 An error occurred during installation No such plugin cloudbees folder 字面意思是没有找到cloudbees folder这个插件 有一些文章
  • python爬虫入门教程(非常详细),超级简单的Python爬虫教程

    一 基础入门 1 1什么是爬虫 爬虫 spider 又网络爬虫 是指向网站 网络发起请求 获取资源后分析并提取有用数据的程序 从技术层面来说就是 通过程序模拟浏览器请求站点的行为 把站点返回的HTML代码 JSON数据 二进制数据 图片 视
  • jdbc的用处

    概念 JDBC Java DataBase Connectivity Java数据库连接技术 具体讲就是通过Java连接广泛的数据库 并对表中数据执行增 删 改 查等操作的技术 如图所示 此前我们学习过SQL后 可以通过 Navicat S
  • String index out of range: 6 报错

    debug发现是字符串越界 具体原因是程序中没判断是否需要CreateDate属性 而这个属性被拉去转化成字符串 当传入的article对象中没有给该字段赋值 即为null 被转化成了字符串 null 后续对该字符串进行截取 长度自然不够
  • java stream流递归实现树形结构

    sql 测试数据 DROP TABLE IF EXISTS pms category CREATE TABLE pms category cat id bigint 20 NOT NULL AUTO INCREMENT COMMENT 分类
  • 职业规划指导:消化这些技巧能让你升值一倍!!!

    序言 在担任公司高管的几年间 我面试过数以百计的各个层面的员工 其中最让我感到遗憾的一个现象就是很多人有着非常好的素质 甚至有的还是名校的毕业生 因为不懂得去规划自己的职业 在工作多年后 依然拿着微薄的薪水 为了一份好一点的工作而奔波 很多
  • 华为机试真题:消息队列合并

    http t csdn cn vFTTJ
  • 无向图的遍历_大鲨说算法与数据结构图(一)

    图系列 一 1 相关概念 应用 图应用很广泛比如社交网络 地图导航 游戏开发等 有向图 入度 出度 比如上面的有环3节点入度是2出度是1 无向图 其实类似每一条边有2条入度和出度的有向图 有权图 边可以拥有权值 连通图 如果无向图中任意2个
  • Java 8 之函数式接口史上最全详解

    转自 Java 8 之函数式接口史上最全详解 函数式接口简介 函数式接口 指只有一个抽象方法的接口 函数式接口 可以被隐式转换为Lambda表达式 函数式接口 可以用 FunctionalInterface注解标识 此注解非必须使用 常用函
  • 电子设计之硬件开发流程和前辈的指导

    硬件开发流程 图1 硬件开发流程 图2 硬件开发流程简图 开发流程经验 图2 硬件开发流程框图2 基本思想是使每一步流程具有严密的逻辑 每一步流程可操作 每一步流程的输入 操作及输出受控 1 硬
  • Groovy List 常用操作

    1 集合克隆 def list1 a b c def list2 list1 clone 2 list遍历 a 使用each进行遍历 def list 1 2 3 list each println Item it it是是与当前元素对应的
  • SQL中的in、not in语句遇到null时的坑点

    背景介绍 前两天做问题排查的时候 写了一条sql 但是并没有如期地查到数据 确实是有数据的 SQL如下 SELECT tar FROM tb account relation tar WHERE tar customer id NOT IN