mariadb 如何比较两个属性,其中一方包含NULL值

2w3kk1z5  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(94)

我必须比较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;
此命令返回空集。
知道为什么吗?

1tuwyuhd

1tuwyuhd1#

如果表b中的字段BLENGTH仅包含NULL值,则使用标准SQL比较运算符(如<><>=等)与NULL进行任何比较都会导致NULL(未知)。
这意味着条件cast(CONTENTLENGTH as decimal)<>b.BLENGTH将始终被评估为NULL(未知),因此没有行将匹配该条件。
要包含BLENGTHNULL的行,需要显式处理NULL值。
以下是如何修改查询以查找不匹配的内容,包括BLENGTHNULL的内容:

SELECT a.ID, a.CONTENTLENGTH, b.BLENGTH
FROM a
INNER JOIN b ON a.ID = b.ID
WHERE 
    (cast(a.CONTENTLENGTH as decimal) <> b.BLENGTH) 
    OR 
    (b.BLENGTH IS NULL AND a.CONTENTLENGTH IS NOT NULL)
    OR 
    (b.BLENGTH IS NOT NULL AND a.CONTENTLENGTH IS NULL);

这将为您提供给予:
1.其中CONTENTLENGTH(转换为十进制)和BLENGTH的值不同。
1.其中BLENGTHNULL,但CONTENTLENGTH不是。
1.其中BLENGTH不是NULL,而是CONTENTLENGTH
这应该涵盖了所有的不匹配。

相关问题