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

SQL查询需求:筛选不含指定数字且包含空值的行

解决SQL筛选不包含指定数字且处理空值的问题

嘿,我来帮你搞定这个问题!你的原SQL语句之所以选不到包含空值的行,核心原因是SQL中NULL和任何值做比较都会返回UNKNOWN,而逻辑判断里UNKNOWN会被当作false处理,导致那些带空值的行被错误过滤掉了。

原语句的问题分析

假设某一行的col1是NULL,col2和col3都是1,原语句的条件(col1 != 1 or col2 != 1 or col3 != 1)会拆解为:

  • col1 !=1 → UNKNOWN
  • col2 !=1 → false
  • col3 !=1 → false

整个OR表达式的结果是UNKNOWN OR false OR false,最终返回UNKNOWN,不会被判定为true,所以这行不会被选中,但实际上这行的col1是NULL(并非1),应该符合筛选条件。

正确的SQL写法

如果你的需求是筛选出所有列都不包含指定数字(这里是1)的行(允许列值为NULL),可以用最直观的写法:

SELECT * FROM table 
WHERE (col1 IS NULL OR col1 != 1)
  AND (col2 IS NULL OR col2 != 1)
  AND (col3 IS NULL OR col3 != 1);

要是你的需求是只要有一列不是1(包括NULL)就选中该行,只需要把上面的AND换成OR即可:

SELECT * FROM table 
WHERE (col1 IS NULL OR col1 != 1)
   OR (col2 IS NULL OR col2 != 1)
   OR (col3 IS NULL OR col3 != 1);

关键提醒

在SQL里处理NULL一定要用IS NULL或IS NOT NULL,绝对不能用普通的比较运算符(=、!=、<>等)——这些运算符和NULL比较永远返回UNKNOWN,会直接打乱你的逻辑判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:02