MySQL IN 运算符和 Null 值:为什么排除具有 Null 错误的行?

Patricia Arquette
发布: 2024-10-23 17:43:02
原创
732 人浏览过

MySQL IN Operator and Null Values: Why Are Rows with Null Errors Excluded?

MySQL IN 运算符和空值

在 MySQL 中,IN 运算符用于检查给定值是否与指定范围内的任何值匹配列表。但是,当使用带有 null 值的 IN 运算符时,可能会出现意外行为。

为什么排除 NULL 值

MySQL IN 运算符返回一个布尔结果(TRUE 或错误的)。将非空值与 null 进行比较时,结果始终为 FALSE。因此,当使用 IN 检查某个值是否不等于列表中包含 null 的任何值时,所有具有 null 值的行都会从结果中排除。

修复问题

要在结果中包含空值,可以使用以下选项:

  1. COALESCE 函数: COALESCE 函数可以用指定的默认值替换空值。使用此函数,查询可以修改为:
Error = COALESCE(Error, '') NOT IN ('Timeout','Connection Error');
登录后复制
  1. OR 运算符: OR 运算符可用于检查是否存在特定的错误代码并且不存在空错误值。因此,查询可以重写为:
Error IS NULL OR Error NOT IN ('Timeout','Connection Error');
登录后复制
  1. CASE 语句: CASE 语句可用于评估多个条件并根据条件返回特定值结果。在这种情况下,它可用于创建一个布尔表达式,该表达式对于具有非空错误的行返回 TRUE。查询可以修改为:
CASE WHEN Error IS NULL THEN 1
ELSE Error NOT IN ('Timeout','Connection Error') THEN 1
END = 1
登录后复制
  1. JOIN 子查询: JOIN 子查询可用于从多个表中检索数据,并根据常见情况。此方法可以确保不排除存在 null 错误的行:
SELECT t1.*
FROM Table1 t1
LEFT JOIN (
    SELECT Error
    FROM ErrorTable
    WHERE Error IN ('Timeout')
) t2 ON t1.Error = t2.Error;
登录后复制

结论

当对 null 值使用 IN 运算符时,这一点很重要了解该运算符将 null 视为特殊值。要在结果中包含空值,必须采用额外的条件或技术,例如上面提到的那些。

以上是MySQL IN 运算符和 Null 值:为什么排除具有 Null 错误的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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