SQL:如果字段需要排除某个值但又有空值时,不能直接用“<>”或not in

在 SQL 中,如果字段需要排除某个值但又有空值存在时,不能直接使用"<>"(不等于)或 NOT IN,是因为这些操作会把空值也考虑进去,但通常情况下可能并不希望空值被这样处理。

以下是一些解决方法:

一、使用 COALESCE 函数和条件判断

sql 复制代码
SELECT *
FROM your_table
WHERE COALESCE(field_name, 'placeholder_value') <> 'excluded_value';

这里假设 'placeholder_value' 是一个不可能与实际数据混淆的值。COALESCE 函数会在 field_nameNULL 时返回 'placeholder_value',这样就可以在比较时避免空值的干扰,同时排除特定值。

二、使用 IS NOT NULL<> 结合

sql 复制代码
SELECT *
FROM your_table
WHERE field_name IS  NULL OR field_name <> 'excluded_value';

这种方法不会排除掉空值,只排除了特定值,确保空值不会被错误地处理。

三、使用 CASE WHEN 语句

sql 复制代码
SELECT *
FROM your_table
WHERE CASE
          WHEN field_name IS NULL THEN NULL
          ELSE field_name
          END <> 'excluded_value';

CASE WHEN 语句根据字段是否为空进行判断,如果为空则返回 NULL,否则返回字段值,然后进行不等于比较,从而排除特定值并正确处理空值。

相关推荐
kida_yuan12 小时前
【Oracle】Ubuntu 部署 Oracle 10g 的完整实战复盘
数据库·ubuntu·oracle
杰克崔12 小时前
内核里的__private变量的使用及sparse
linux·运维·服务器·车载系统
霖霖总总12 小时前
[小技巧44]MySQL Purge 线程详解:作用、机制与性能优化
数据库·mysql
每次学一点12 小时前
如何将网吧电脑加入ZeroTier虚拟局域网
运维·服务器·网络
菜鸡上道12 小时前
MySQL 查询优化全解析:从原理到实战
数据库·mysql
勉灬之12 小时前
基于 Node.js + mysql2 的实用同步助手,适合开发/测试环境下快速对齐表数据
服务器·网络·node.js
很㗊12 小时前
Linux --- tar命令常见用法
linux·运维·服务器
weixin_4209476412 小时前
mysql查询关联数据中同时关联了多个业务的数据
数据库·mysql
偷星星的贼1112 小时前
Python虚拟环境(venv)完全指南:隔离项目依赖
jvm·数据库·python
RisunJan12 小时前
Linux命令-ld(将目标文件连接为可执行程序)
linux·运维·服务器