SQL:字段a not in (筛选值 or 子查询),当字段a = null 或not in里面存在null时。sql筛选结果可能不符预期

SQL:字段a not in (筛选值 or 子查询),当字段a = null 或not in里面存在null时。sql筛选结果可能不符预期

1.sql中where条件字段a使用not in,当in里面a为null时,结果会怎样?

在SQL中,使用 NOT IN 子句时,如果in里 包含 NULL 值,结果可能并不如预期。这是因为 NULL 在 SQL 中表示未知值,而 NOT IN 子句需要比较一个值是否不在某个集合中。当遇到 NULL 值时,比较操作将返回 UNKNOWN(未知),这可能导致整个 NOT IN 条件的结果也是 UNKNOWN,从而影响查询的最终结果。

具体来说,当 NOT IN 子句中的集合包含 NULL 时,SQL 引擎无法确定字段 a 中的某个值是否不在这个集合中,因为 NULL 表示未知。因此,包含 NULLNOT IN 子句通常会返回空集(即没有匹配的行)。

举个例子,假设你有一个表 example_table,其中有一个字段 a

CREATE TABLE example_table (id INT,a INT
);INSERT INTO example_table (id, a) VALUES
(1, 1),
(2, NULL),
(3, 3);

如果你执行以下查询:

SELECT * FROM example_table WHERE a NOT IN (1, NULL);

由于集合 (1, NULL) 中包含 NULL,查询结果可能为空,因为 SQL 引擎无法确定 a 的值是否不在这个集合中。

为了避免这个问题,通常有以下几种方法:

  1. 使用 IS NOT NULL 过滤掉 NULL

    SELECT * FROM example_table WHERE a IS NOT NULL AND a NOT IN (1);
    

    这样,NOT IN 子句就不会包含 NULL 值。

  2. 使用 <>(不等于)操作符替代 NOT IN

    如果集合中的值是已知的且不包含 NULL,可以使用 <> 操作符。但这种方法不适用于动态集合,特别是当集合可能包含 NULL 时。

  3. 使用 NOT EXISTS

    另一种方法是使用 NOT EXISTS 子句,这样可以避免 NULL 带来的问题。

    SELECT * FROM example_table e
    WHERE NOT EXISTS (SELECT 1 FROM (VALUES (1), (NULL)) AS t(val)WHERE e.a = t.val
    );
    

    这种方法更灵活,可以处理包含 NULL 的集合。

总之,在使用 NOT IN 子句时,要注意集合中是否可能包含 NULL 值,并采取相应的措施来避免潜在的问题。

2.上述回答的是in里面包含null,where 字段a in(筛选值),如果是a字段为null呢?

如果 a 字段为 NULL,并且你在 WHERE 子句中使用 a IN (筛选值) 来筛选数据,那么结果也会受到 NULL 值的影响。在 SQL 中,NULL 表示未知或缺失的值,因此任何与 NULL 的比较操作(如 =<>IN 等)都会返回 UNKNOWN,而不是 TRUEFALSE

具体来说,当 a 字段为 NULL 时,a IN (筛选值) 这个条件会评估为 UNKNOWN,因为 SQL 引擎无法确定 NULL 是否在指定的筛选值集合中。由于 IN 子句要求值必须在集合中才能返回 TRUE,而 UNKNOWN 并不等同于 TRUE,因此包含 NULL 值的行通常不会被 IN 子句选中。

举个例子,假设你有一个表 example_table,其中有一个字段 a

CREATE TABLE example_table (id INT,a INT
);INSERT INTO example_table (id, a) VALUES
(1, 1),
(2, NULL),
(3, 3);

如果你执行以下查询:

SELECT * FROM example_table WHERE a IN (1, 2);

由于 a 字段为 NULL 的行(即 id = 2 的行)不满足 a IN (1, 2) 的条件(因为 NULL 不等于 1 也不等于 2,但这里的比较实际上是 UNKNOWN),所以这一行不会被选中。查询结果将只包含 id = 1id = 3 的行。

如果你想要选中 a 字段为 NULL 的行,你需要使用 IS NULL 条件,而不是 IN 子句。例如:

SELECT * FROM example_table WHERE a IN (1, 2) OR a IS NULL;

但请注意,上面的查询逻辑上可能不是你想要的,因为它会同时选中 a(1, 2) 集合中和 aNULL 的行。如果你只想选中 aNULL 的行(或者同时满足其他条件),你应该单独使用 IS NULL 条件,或者结合其他逻辑条件来确保查询的准确性。

总之,当 a 字段为 NULL 时,使用 IN 子句进行筛选通常不会选中这些行,除非你明确地将 NULL 值作为筛选条件的一部分(但这样做通常需要使用 IS NULL 而不是 IN)。

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

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

相关文章

【JAVA毕设】基于JAVA的酒店管理系统

一、项目介绍 本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router实现动态路由&#xff0c;Ajax实现前后端通信&#xff0c;Element-plus组件库使页面快速成型。后端部分&#xff1a;采用SpringBoot作为开发框架&#xff0c;同时集成MyBatis、Redis、…

Chrome DevTools:Console Performance 汇总篇

Chrome DevTools Chrome 开发者工具是一套 Web 开发者工具&#xff0c;直接内置于 Google Chrome 浏览器中。 开发者工具可以帮助您即时修改页面和快速诊断问题&#xff0c;最终帮助您更快地构建更好的网站。 一、开启 DevTools 右上角菜单 > 更多工具 > 开发者工具 页面…

如何用mmclassification训练多标签多分类数据

这里使用的源码版本是 mmclassification-0.25.0 训练数据标签文件格式如下&#xff0c;每行的空格前面是路径&#xff08;图像文件所在的绝对路径&#xff09;&#xff0c;后面是标签名&#xff0c;因为特殊要求这里我的每张图像都记录了三个标签每个标签用“,”分开&#xff0…

力扣71~75题

题71&#xff08;中等&#xff09;&#xff1a; python代码&#xff1a; class Solution:def simplifyPath(self, path: str) -> str:#首先根据/分割字符串&#xff0c;再使用栈来遍历存储p_listpath.split(/)p_stack[]for i in p_list:#如果为空则肯定是//或者///if i:con…

mac m1 安装openresty以及redis限流使用

一切源于一篇微信文章 早上我上着班&#xff0c;听着歌1.打算使用腾讯云服务器centos-7实验&#xff1a;安装ngx_devel_kitmac m1 os 12.7.6 安装openresty测试lua限流: 终于回到初心了&#xff01; 早上我上着班&#xff0c;听着歌 突然微信推送了一篇文章《Nginx 实现动态封…

记录一次从nacos配置信息泄露到redis写计划任务接管主机

经典c段打点开局。使用dddd做快速的打点发现某系统存在nacos权限绕过 有点怀疑是蜜罐&#xff0c;毕竟nacos这实在是有点经典 nacos利用 老规矩见面先上nacos利用工具打一波看看什么情况 弱口令nacos以及未授权访问&#xff0c;看这记录估计被光顾挺多次了啊 手动利用Nacos-…

MySQL - Navicat自动备份MySQL数据

对于从事IT开发的工程师&#xff0c;数据备份我想大家并不陌生&#xff0c;这件工程太重要了&#xff01;对于比较重要的数据&#xff0c;我们希望能定期备份&#xff0c;每天备份1次或多次&#xff0c;或者是每周备份1次或多次。 如果大家在平时使用Navicat操作数据库&#x…

深入解析Python数据容器

Python数据容器 1&#xff0c;数据容器介绍2&#xff0c;数据容器的分类3&#xff0c;数据容器&#xff1a;list&#xff08;列表&#xff09;3.1&#xff0c;列表的定义3.2&#xff0c;列表的下标索引3.3&#xff0c;列表的常用操作3.3.1&#xff0c;查找指定元素下标3.3.2&am…

【OpenAI】第三节(上下文)什么是上下文?全面解读GPT中的上下文概念与实际案例

文章目录 一、GPT上下文的定义1.1 上下文的组成 二、GPT上下文的重要性2.1 提高生成文本的相关性2.2 增强对话的连贯性2.3 支持多轮对话 三、使用上下文改善编程对话3.1 使用上下文的概念3.2 使用上下文改善对话的作用3.3 使用上下文改善对话的方法3.4 案例分析 四、利用历史记…

安装Openeuler出现的问题

1.正常安装中&#xff0c;不显示已有的网络&#xff0c;ens33 尝试&#xff1a;手敲ens33配置&#xff0c;包括使用uuidgen ens33 配置还是不行 可能解决办法1&#xff1a;更换安装的版本。譬如说安装cenos 7 64位 启动虚拟机&#xff0c;更换版本之后的安装界面&#xff0c;…

Excel常用操作培训

以下是Excel的基本操作&#xff0c;内部培训专用。喜欢就点赞收藏哦&#xff01; 目录 1 Excel基本操作 1.1 常用快捷键 1.1.1快捷键操作工作簿、工作表 1.1.2快捷键操作 1.1.3单元格操作 1.1.4输入操作 2.1 常见功能描述 2.1.1 窗口功能栏 2.1.2 剪切板 2.1.3 字体…

计算机网络——传输层服务

传输层会给段加上目标ip和目标端口号 应用层去识别报文的开始和结束

海南聚广众达电子商务咨询有限公司靠谱吗怎么样?

在当今这个数字化浪潮席卷全球的时代&#xff0c;抖音电商以其独特的魅力成为了众多商家争相入驻的新蓝海。而在这片浩瀚的电商海洋中&#xff0c;如何找到一家既专业又可靠的合作伙伴&#xff0c;成为了众多商家心中的一大难题。今天&#xff0c;我们就来深入剖析一下海南聚广…

组件可控个性化生成新方法MagicTailor:生成过程中可以自由地定制ID

今天的文章来自公众号粉丝投稿&#xff0c;文章提出了一种组件可控的个性化生成方法MagicTailor&#xff0c;旨在个性化生成过程中可以自由地定制ID的特定组件。 相关链接 论文阅读&#xff1a;https://arxiv.org/pdf/2410.13370 项目主页&#xff1a;https://correr-zhou.gi…

拼多多详情API接口的获取与应用

一、拼多多详情API接口概述 1. API接口定义与功能 拼多多开放平台为开发者提供了丰富的API接口&#xff0c;其中商品详情API接口尤为重要。该接口允许开发者通过编程方式获取商品的详细信息&#xff0c;包括商品标题、价格、描述、图片、规格参数、库存等。这些信息对于电商数…

无人机之自主飞行关键技术篇

无人机自主飞行指的是无人机利用先进的算法和传感器&#xff0c;实现自我导航、路径规划、环境感知和自动避障等能力。这种飞行模式大大提升了无人机的智能化水平和操作的自动化程度。 一、传感器技术 传感器是无人机实现自主飞行和数据采集的关键组件&#xff0c;主要包括&a…

Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

前言&#xff1a;最近重拾Unity&#xff0c;准备做个3D的FPS小游戏&#xff0c;这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质&#xff08;Material&#xff09;、…

No.18 笔记 | XXE(XML 外部实体注入)漏洞原理、分类、利用及防御整理

一、XXE 漏洞概述 &#xff08;一&#xff09;定义 XXE&#xff08;XML 外部实体注入&#xff09;漏洞源于 XML 解析器对外部实体的不当处理&#xff0c;攻击者借此注入恶意 XML 实体&#xff0c;可实现敏感文件读取、远程命令执行和内网渗透等危险操作。 &#xff08;二&am…

一、Python基础语法(有C语言基础速成版)

在python中&#xff0c;变量是没有类型的&#xff0c;变量存储的数据是有类型的 可以把变量当做一个存放物品的盒子 一、字面量 字面量&#xff1a;在代码中&#xff0c;被写下来的 固定的值 python中常见的值的类型 二、注释 # 我是单行注释&#xff0c;一般要加个空格&a…

java设计模式——装饰者模式

定义&#xff1a; 装饰者模式是一种结构型设计模式&#xff0c;它允许动态地给对象添加新的功能&#xff0c;而不会改变其原有的结构。与继承不同&#xff0c;装饰者模式通过组合而不是继承来扩展对象的功能&#xff0c;这样可以有效地避免类爆炸问题&#xff08;多个子类的冗余…