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

MariaDB中对比含NULL值的属性为何返回空结果?

问题原因解析

这是因为SQL中NULL的比较逻辑特性导致的:

  • 在MariaDB(以及所有遵循SQL标准的数据库)中,NULL代表未知值,它和任何值(包括另一个NULL)进行比较时,结果既不是TRUE也不是FALSE,而是UNKNOWN。
  • 你的WHERE子句cast(CONTENTLENGTH as decimal)<>b.BLENGTH里,b.BLENGTH全为NULL,所以这个比较表达式的结果永远是UNKNOWN。而WHERE只会保留结果为TRUE的行,UNKNOWN的行会被直接过滤,最终返回空集。

如果要找出所有CONTENTLENGTH转成decimal后与BLENGTH不匹配(包括BLENGTH为NULL的情况),可以修改条件:

select a.ID,a.CONTENTLENGTH,b.BLENGTH 
from a inner join b on a.ID=b.ID 
where cast(CONTENTLENGTH as decimal) <> b.BLENGTH 
   OR b.BLENGTH IS NULL;

或者使用MariaDB支持的IS NOT DISTINCT FROM运算符(它会将NULL视为可比较的相等值):

select a.ID,a.CONTENTLENGTH,b.BLENGTH 
from a inner join b on a.ID=b.ID 
where cast(CONTENTLENGTH as decimal) IS NOT DISTINCT FROM b.BLENGTH;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:47:02