首页 数据库 mysql教程 如何处理MySQL的IN关键字中的NULL值以进行精确过滤?

如何处理MySQL的IN关键字中的NULL值以进行精确过滤?

Oct 23, 2024 pm 04:09 PM

How to Handle NULL Values in MySQL's IN Keyword for Accurate Filtering?

了解 MySQL 的 IN 关键字中的 NULL 处理

MySQL 的 IN 关键字返回布尔结果,但需要注意的是,它并不总是返回返回 1(真)或 0(假)。 NULL 的特殊情况可能会引入意外行为,特别是在过滤数据时。

IN 中 NULL 的情况

以下查询排除 Error 列为以下任一情况的行: '超时'或'连接错误':

select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error')
登录后复制

但是,此查询不包含 Error 为 NULL 的行。这是因为当将值与 NULL 进行比较时,IN 运算符的计算结果为 NULL。因此,对于具有 NULL 值的行,表达式“Error not in ('Timeout','Connection Error')”为 false。

NULL 处理的解决方法

要在处理 NULL 值时检索正确的结果,有几种方法:

1.使用 COALESCE() 默认为空字符串

COALESCE(Error,'') not in ('Timeout','Connection Error')
登录后复制

2.使用 OR 测试 NULL 和值不等式

Error IS NULL OR Error not in ('Timeout','Connection Error')
登录后复制

3.使用 CASE 模拟布尔求值

CASE WHEN Error IS NULL THEN 1
 ELSE Error not in ('Timeout','Connection Error') THEN 1
 END = 1
登录后复制

区分大小写和性能

OR 不会短路,这意味着即使第一个是假的。另一方面,如果满足第一个条件,CASE 可以停止评估。当存在许多潜在的 NULL 值时,这会带来更好的性能。

空比较示例

要说明 IN 表达式中 NULL 的行为,请考虑下表:

msg description
hi greet
NULL nothing

表达式:

select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner')
登录后复制

将仅返回带有“hi”的行。这是因为另一行的 msg 为 NULL,导致比较不确定。

综上所述,MySQL 的 IN 关键字在与 NULL 值进行比较时可能会返回 NULL,从而导致过滤时出现意外结果。为了解决这个问题,请使用上面讨论的解决方法之一来确保准确的数据检索。

以上是如何处理MySQL的IN关键字中的NULL值以进行精确过滤?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

减少在Docker中使用MySQL内存的使用 减少在Docker中使用MySQL内存的使用 Mar 04, 2025 pm 03:52 PM

减少在Docker中使用MySQL内存的使用

如何使用Alter Table语句在MySQL中更改表? 如何使用Alter Table语句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

如何使用Alter Table语句在MySQL中更改表?

mysql无法打开共享库怎么解决 mysql无法打开共享库怎么解决 Mar 04, 2025 pm 04:01 PM

mysql无法打开共享库怎么解决

什么是 SQLite?全面概述 什么是 SQLite?全面概述 Mar 04, 2025 pm 03:55 PM

什么是 SQLite?全面概述

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) 在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) Mar 04, 2025 pm 03:54 PM

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器)

在MacOS上运行多个MySQL版本:逐步指南 在MacOS上运行多个MySQL版本:逐步指南 Mar 04, 2025 pm 03:49 PM

在MacOS上运行多个MySQL版本:逐步指南

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? 如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? Mar 18, 2025 pm 12:00 PM

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)?

如何为MySQL连接配置SSL/TLS加密? 如何为MySQL连接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

如何为MySQL连接配置SSL/TLS加密?

See all articles