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

如何用SQL查询同时获取同一列中的NULL值和指定值(如2)

SQL怎么同时查询某列的NULL和值为2的记录?

为啥你之前的写法不生效

  • IN (2, NULL) 查不到NULL是因为SQL里NULL不能用普通的等于、IN来匹配,任何和NULL的比较结果都是“不确定”,不会被筛选出来。
  • 你写的AND columName = 2 OR columName IS NULL只返回值为2的记录,大概率是运算符优先级搞的鬼:AND比OR优先级高,要是你的WHERE子句前面还有其他条件,比如WHERE 其他条件 AND columName=2 OR columName IS NULL,实际会被解析成(其他条件 AND columName=2) OR columName IS NULL,要是其他条件对NULL那条记录不成立,自然就只返回columName=2的了。

正确写法

1. 用括号明确逻辑优先级(有其他条件必用)

不管有没有其他查询条件,把columName=2 OR columName IS NULL用括号包起来,确保逻辑正确:

WHERE (columName = 2 OR columName IS NULL)
-- 要是有其他条件,比如:
WHERE 其他字段 = '某值' AND (columName = 2 OR columName IS NULL)

2. 用COALESCE转换NULL后筛选

把NULL转换成一个业务中不会出现的特殊值,再用IN匹配:

WHERE COALESCE(columName, -1) IN (2, -1)

这里的-1只是示例,换成你业务里columName绝不会出现的值即可。

3. 部分数据库支持的简便写法

像PostgreSQL、SQLite这类数据库支持IS NOT DISTINCT FROM运算符,可以这么写:

WHERE columName IS NOT DISTINCT FROM 2 OR columName IS NOT DISTINCT FROM NULL

不过这个写法不如第一种直观,还是优先推荐括号包裹的写法。

测试验证

用你提供的测试数据:

columName
2
NULL

执行WHERE (columName = 2 OR columName IS NULL)会返回两条记录,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:33:24