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

SQL筛选状态变更行时old!=new忽略NULL值问题如何解决

问题原因

你当前查询无法匹配old为NULL的变更记录,是因为SQL中NULL与任意值进行!=、=这类常规比较运算时,返回结果都为未知,不会被WHERE条件判定为真,所以初始状态从NULL转为其他值的记录全部被漏掉了。

解决方案

方案1(适配支持标准SQL的数据库)

PostgreSQL、SQL Server 2022+、MySQL 8.0.20+等主流数据库都支持IS DISTINCT FROM运算符,专门用于处理包含NULL的等值/不等值判断,写法更简洁:

SELECT id, name, old, new, `timestamp`
FROM tablex
WHERE id = 12342
  AND old IS DISTINCT FROM new
ORDER BY `timestamp` ASC;

方案2(兼容所有数据库版本)

如果你的数据库不支持上述运算符,可以手动补全NULL的判断逻辑,覆盖所有状态变更场景:

SELECT id, name, old, new, `timestamp`
FROM tablex
WHERE id = 12342
  AND (
    old != new
    OR (old IS NULL AND new IS NOT NULL)
    OR (old IS NOT NULL AND new IS NULL)
  )
ORDER BY `timestamp` ASC;

效果说明

上述两种写法都可以正确过滤old和new完全一致的冗余行,同时保留所有状态变更记录:包括NULL转非空、非空转NULL、非空值之间变更的所有场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:39:00