我必须比较MariaDB中两个表的属性:
表a:
ID decimal
CONTENTLENGHT varchar(20)
表b:
ID decimal
BLENGTH decimal(10.0)
(data模型不是我的- ))
表b中的字段应该包含我应该检查的内容。但是,它只包含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;
此命令返回空集。
知道为什么吗?
1条答案
按热度按时间1tuwyuhd1#
如果表
b
中的字段BLENGTH
仅包含NULL
值,则使用标准SQL比较运算符(如<>
、<
、>
、=
等)与NULL
进行任何比较都会导致NULL
(未知)。这意味着条件
cast(CONTENTLENGTH as decimal)<>b.BLENGTH
将始终被评估为NULL
(未知),因此没有行将匹配该条件。要包含
BLENGTH
为NULL
的行,需要显式处理NULL
值。以下是如何修改查询以查找不匹配的内容,包括
BLENGTH
是NULL
的内容:这将为您提供给予:
1.其中
CONTENTLENGTH
(转换为十进制)和BLENGTH
的值不同。1.其中
BLENGTH
是NULL
,但CONTENTLENGTH
不是。1.其中
BLENGTH
不是NULL
,而是CONTENTLENGTH
。这应该涵盖了所有的不匹配。