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

Barbara Streisand
发布: 2024-10-23 16:09:02
原创
337 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!