mysql中null值对in子查询的影响

1、场景

有这样一个查询,有些时候是正确的,有些时候没报错但是又查询不到数据,分析数据排查后发现当user_id字段存在null值的时候查询不到数据。

select * from table1 where id in (select user_id from talbe2 where status=1);

2、问题

为什么这个语句当子查询的user_id存在null的时候外部的id in查询就查不到数据?

3、分析

查阅资料得知这是由于NULL的特殊性造成的。具体原因如下:

(1)NULL 表示未知值。

任何与 NULL 进行比较的操作都会返回 UNKNOWN。例如 NULL = NULL 返回 UNKNOWN,NULL != NULL 也返回 UNKNOWN。

(2)IN 子查询的行为:

当 IN 子查询的结果集中包含 NULL 时,IN 操作符会检查每个值是否等于子查询中的任何一个值。
如果子查询结果集中有 NULL,那么 IN 操作符会返回 UNKNOWN,而不是 TRUE

在 MySQL 中,IN 子查询的行为会受到 NULL 值的影响。具体来说,如果子查询的结果集中包含 NULL,那么 IN 子查询将不会返回任何匹配的行。这是因为 NULL 在 SQL 中表示未知值,而 IN 操作符在处理 NULL 时会返回 UNKNOWN,而不是 TRUE 或 FALSE。

4、示例

假设 table1 中有一行 id 为 1。
子查询 (select user_id from table2 where status=1) 返回 [1, NULL]。
1 IN (1, NULL) 的结果是 UNKNOWN,因为 1 = NULL 返回 UNKNOWN。
因此,外部查询 select * from table1 where id in (select user_id from table2 where status=1) 不会返回任何行。

5、解决方法

方法一:排除 NULL 值,在子查询中排除 NULL 值,确保子查询结果集中没有 NULL。

select * from table1 where id in (select user_id from table2 where status=1 and user_id is not null);

方法二:使用 EXISTS 替代 IN,EXISTS 子查询不会受 NULL 值的影响,可以避免这个问题。

select * from table1 t1 where exists (select 1 from table2 t2 where t2.status = 1 and t2.user_id = t1.id);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921572.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 tortoise-orm 内使用 JSON_EXTRACT

先说结论: # 假设 JsonField 名称为 data,内容为 {"info": {"path": "我的资源创建"}} qs qs.filter(data__filter{"info.path": "我的资源创建"})我查看了 tortoise-orm 官方文档,没有这…

西门子S7-200 SMART PLC:编写最基础的“起保停”程序

一、什么是“起保停”电路?“起保停”是“启动-保持-停止”的简称,也称为“自锁电路”。它是继电器控制系统和PLC程序中最基本、最核心的控制逻辑。启动 (Start): 由一个点动按钮(常开触点)触发,使设备运行。保持 (H…

漏洞修复 Nginx SSL/TLS 弱密码套件

扫描结果 [rootlocalhost nmap]# docker run --rm -v $(pwd)/results:/results securecodebox/nmap nmap --script ssl-enum-ciphers -p 443 xxx.cn -oX /results/output_0904.xml Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-04 05:02 UTC Nmap scan report for xxx.…

ChartGPT深度体验:AI图表生成工具如何高效实现数据可视化与图表美化?

最近帮运营同事做季度数据报告时,我差点在图表样式上栽跟头 —— 明明数据都算好了,用 Excel 调柱状图的颜色、字体、坐标轴标签,来回改了快半小时,要么字体太大挤在一起,要么颜色搭配显脏,运营催得急&…

深入理解 JVM 字节码文件:从组成结构到 Arthas 工具实践

在 Java 技术体系中,JVM(Java 虚拟机)是实现 “一次编写,到处运行” 的核心。而字节码文件作为 Java 代码编译后的产物,是 JVM 执行的 “原材料”。今天,我们就从字节码文件的组成结构讲起,再结…

SoundSource for Mac 音频控制工具

SoundSource for Mac 是一款音频控制工具,中文常被称为 音频源管理器。它能够精确控制系统与应用程序的音量、输出设备和音效处理,让用户获得比 macOS 原生更灵活的音频管理体验。SoundSource 既适合音乐发烧友,也适合日常办公和影音娱乐用户…

云平台面试内容(二)

5. VPC、子网、路由、NAT网关、安全组、网络ACL 区别与网络隔离设计 概念区别: VPC(虚拟私有云): VPC是在公有云上划分出的一个用户专属的虚拟网络环境,相当于用户在云上的私有数据中心。用户可以自定义VPC的IP地址段、路由策略等。不同VPC网络隔离,默认互不相通,确保资…

2023 arXiv MapperGPT: Large Language Models for Linking and Mapping Entities

论文基本信息 题目:MapperGPT: Large Language Models for Linking and Mapping Entities作者:Nicolas Matentzoglu, J. Harry Caufield, Harshad B. Hegde, Justin T. Reese, Sierra Moxon, Hyeongsik Kim, Nomi L. Harris, Melissa A Haendel, Christo…

Docker入门到精通:从零基础到生产部署

前言:为什么你需要学习Docker? 想象一下,你开发了一个应用程序,在你的电脑上运行完美,但当你把它交给同事或部署到服务器时,却出现了各种奇怪的问题。这就是著名的"在我机器上能运行"问题。 Do…

HOT100--Day15--98. 验证二叉搜索树,230. 二叉搜索树中第 K 小的元素,199. 二叉树的右视图

HOT100–Day15–98. 验证二叉搜索树,230. 二叉搜索树中第 K 小的元素,199. 二叉树的右视图 每日刷题系列。今天的题目是《力扣HOT100》题单。 题目类型:二叉树。 关键:要深刻理解《递归》 98. 验证二叉搜索树 思路: …

独角数卡对接蓝鲸支付平台实现个人

目录 什么是独角数卡?安装部署教程一、独角数卡安装二、独角数卡支付配置三、独角数卡BUG修复 什么是独角数卡? ‌ ‌ ‌ ‌ ‌ ‌ ‌ 独角数卡(Dujiaoka)‌是一款基于Laravel框架开发的开源式站长自动化售货解决方案,主要用于虚拟商品和数字…

人工智能常见分类

人工智能的分类方式多样,以下是一些常见的分类方法及具体类型: 一、按功能目标分类 弱人工智能(ANI,Narrow AI):专注于单一任务,无自主意识,如图像识别(人脸解锁&#xf…

PO BAPI bapi_po_create1

当执行BAPI时,需要导入增强字段,其中增强字段包含数值型号字段时,需要增强BADI::ME_BAPI_PO_CUST 代码如下: 记录一下,下次自己继续用 bapi处: ls_te_item-po_item = lv_item.ls_te_item-zz001 = 11.ls_te_item-zz005 = 22.ls_te_item-zz008 = 33.ls_te_item-zz009 = 44…

栈欺骗技术的作用是什么?

好的,我们来详细解释一下“栈欺骗技术”(Stack Spoofing)的作用。简单来说,栈欺骗技术的核心作用是隐藏程序(尤其是恶意软件或安全工具)的真实调用链,使其逃避基于栈回溯(Stack Walk…

Nano-banana 模型对接教程:最懂创作者的 AI 模型,比GPT-4o还强!

Nano-banana 模型对接教程(含 BaseURL) Nano Banana 是谷歌推出的革命性 AI 图像编辑模型,代表了从"AI绘画工具"到"AI创意伙伴"的范式转移。它不再是被动执行指令,而是能深刻理解已有图像的上下文、光影、物…

CEEMDAN-PSO-CNN-GRU 锂电池健康状态预测matlab

代码说明 这个实现包含以下主要组成部分: 数据准备:加载并预处理锂电池容量数据,划分训练集和测试集 CEEMDAN分解:将原始信号分解为多个本征模态函数(IMF)和一个残差项 PSO优化:使用粒子群算法优化CNN-GRU网络的超参数 CNN-GRU模型:构建并训练卷积神经网络与门控循环…

MySQL 主从读写分离架构

我们首先来详细、清晰地讲解 MySQL 主从读写分离架构,然后逐一解答你提出的以及补充的高频面试问题。第一部分:MySQL 主从读写分离架构详解1. 什么是主从复制与读写分离?你可以把它想象成一个 “团队作战” 的模式。主数据库 (Master)&#x…

HTML 中的 CSS 使用说明

CSS 使用说明 1. CSS 概述 CSS (Cascading Style Sheets) 是一种用于描述 HTML 或 XML(包括如 SVG、MathML 等 XML 方言)文档呈现的样式表语言。CSS 描述了元素应该如何在屏幕、纸张或其他媒体上显示。 2. CSS 的基本语法 CSS 规则由两个主要部分组成…

gitlab推送失败,内存不足的处理

git提交时报错: 2025-09-03 20:03:32.583 [info] > git push origin master:master [4866ms]2025-09-03 20:03:32.583 [info] fatal: Out of memory, malloc failed (tried to allocate 1048576000 bytes)看了下服务器内存,空余的只有几百M了。 用hto…

【FastDDS】Discovery ( 05-Discovery Server Settings)

发现服务器设置 这种机制基于客户端-服务器发现模式,即元流量(域参与者之间用于识别彼此的消息交换)由一个或多个服务器域参与者管理(左图),而在简单发现(右图)中,元流量通过IP多播协议等消息广播机制进行交换。有一款发现服务器工具可简化发现服务器的设置和测试。 …