MySQL 如何处理 IN 表达式中的 NULL 值?

Barbara Streisand
发布: 2024-10-23 18:17:05
原创
300 人浏览过

How Does MySQL Handle NULL Values in IN Expressions?

MySQL IN 关键字和 NULL 值

MySQL 中的 IN 关键字执行给定表达式和值列表之间的比较,返回布尔结果(TRUE/FALSE)。但是,在某些情况下,MySQL 以不同的方式处理 NULL 值。

考虑以下查询:

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

此查询旨在从 Table1 中检索 CurrentDateTime 值大于的行“2012-05-28 15:34:02.403504”和一个不等于“超时”或“连接错误”的错误值。令人惊讶的是,此查询排除了带有 NULL 值的错误行。

为什么 MySQL 会忽略 IN 表达式中的 NULL 值?

MySQL 将 NULL 视为未知或未定义的值。当在 IN 表达式中使用时,MySQL 将 NULL 计算为既不是 TRUE 也不是 FALSE,从而导致未知结果。因此,IN 表达式本身的计算结果为 NULL。

修复查询

要检索具有 NULL 错误值的行,有多种方法:

  1. 使用 COALESCE 将 NULL 值替换为默认值:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
登录后复制
  1. 使用 IS NULL 和 OR 显式检查 NULL 值:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
登录后复制
  1. 使用 CASE 根据错误值分配布尔结果:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 ELSE 0 END = 1;
登录后复制

这些修改确保具有 NULL 错误值的行包含在查询结果中。

以上是MySQL 如何处理 IN 表达式中的 NULL 值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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