You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

T-SQL中对可为空列执行不等值查询的简洁实现方案问询

T-SQL里简洁处理含NULL的不等值查询

T-SQL里的=和<>(或!=)运算符碰到NULL时会直接跳过匹配——毕竟NULL是缺失值,既不能说和别的值相等,也不能说不等。要筛选出两列不匹配的行(包括一方NULL另一方非NULL、双方非NULL但值不一样的情况),不用ISNULL或COALESCE也能写出简洁的WHERE条件,下面两种方法都可以:

方法1:用INTERSECT处理NULL相等逻辑

INTERSECT会把两个NULL当成相等,非NULL值只有完全一样才会返回结果。所以用NOT EXISTS判断两列的交集是否为空,就能挑出不匹配的行:

drop table if exists #values 
create table #values
(val1       varchar(10),
 val2       varchar(10))

insert #values
values ('', ''), ('', NULL), (NULL, ''), ('A', ''), ('', 'A'), ('A', NULL), (NULL, 'A'), ('A', 'A')

select * 
from #values
where NOT EXISTS (SELECT val1 INTERSECT SELECT val2)

方法2:简化逻辑表达式

原来的复杂条件可以合并成更紧凑的写法:直接判断两列不是“完全相等(含都为NULL)”,或者拆成更直观的逻辑:

select * 
from #values
where val1 <> val2 OR (val1 IS NULL <> val2 IS NULL)

这里val1 IS NULL <> val2 IS NULL的意思是“其中一方是NULL,另一方不是”,再加上非NULL时的值不等判断,刚好覆盖所有需要的场景。

这两种写法都能得到你要的6行结果,而且不用依赖ISNULL或COALESCE,逻辑更清爽。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:57:40