SQL WHERE子句如何排除WEIGHT为0的值但保留null值
SQL过滤问题解决方案
在SQL的逻辑判断规则中,NULL与任意值做常规比较(=、<>、>等)的结果都为UNKNOWN,而WHERE子句仅保留判断结果为TRUE的行,因此你写的WEIGHT <> 0会同时过滤掉WEIGHT=0和WEIGHT IS NULL的行。
可行方案
- 【全数据库通用写法】显式补充NULL值判断
直接在WHERE条件中增加NULL保留的逻辑,兼容所有SQL版本:WHERE WEIGHT <> 0 OR WEIGHT IS NULL - 【NULL安全比较运算符写法】部分数据库支持专属的NULL安全比较语法,写法更简洁:
- MySQL:使用NULL安全等于运算符
<=>后取反WHERE NOT WEIGHT <=> 0 - PostgreSQL、SQL Server 2022及以上版本:使用
IS DISTINCT FROM运算符,该运算符会将NULL视为可比较的有效值WHERE WEIGHT IS DISTINCT FROM 0
- MySQL:使用NULL安全等于运算符
- 【函数替换写法】使用通用空值替换函数
COALESCE,将NULL替换为任意非0值后再比较:
注意替换的非0值需要和WHERE COALESCE(WEIGHT, 1) <> 0WEIGHT字段的数据类型匹配,避免产生隐式类型转换影响查询性能。
内容的提问来源于stack exchange,提问作者Cecilie S. K
相关产品推荐
相关产品推荐

