Mysql WHERE中的逻辑条件-结果不正确

Mysql WHERE中的逻辑条件-结果不正确,mysql,sql,where,Mysql,Sql,Where,数据集:只要突出显示错误条件数据,其他条件就可以了 查询: 查询工作正常并获得所需的结果,但当我添加条件时: AND `user_activity`.`parent_type` <> 'ALBUM' 查询不返回任何结果 我不明白这个问题是什么 user_activity.parent_type'ALBUM'条件也会过滤该列上的每个空值,因为空'ALBUM'不是真的,是不确定的。所以你可以用这样的方法: AND (`user_activity`.`parent_type` <&

数据集:只要突出显示错误条件数据,其他条件就可以了

查询:

查询工作正常并获得所需的结果,但当我添加条件时:

AND `user_activity`.`parent_type` <> 'ALBUM'
查询不返回任何结果

我不明白这个问题是什么

user_activity.parent_type'ALBUM'条件也会过滤该列上的每个空值,因为空'ALBUM'不是真的,是不确定的。所以你可以用这样的方法:

AND (`user_activity`.`parent_type` <> 'ALBUM' OR `user_activity`.`parent_type` IS NULL)
或:

SQL使用。NULL“ALBUM”和NULL=“ALBUM”的计算结果均为未知。您需要使用IS NOT NULL或IS NULL与NULL进行比较。

试试这个

SELECT  `id`,   `uid`,  `activity_type`,    `source_id`,    `parent_id`,    `parent_type`,  `post_id`,  `status`
FROM    `user_activity` AS `user_activity`
WHERE
    `user_activity`.`activity_type` IN(
        'STATUS_UPDATE',
        'PROFILE_PICTURE_UPDATED',
        'PROFILE_COVER_UPDATED',
        'ALBUM'
    )
AND `user_activity`.`uid` = '13'
AND `user_activity`.`status` = 'ACTIVE'
AND IFNULL(`user_activity`.`parent_type`,'') <> 'ALBUM'
ORDER BY    id DESC LIMIT 10

如果我考虑SQLfidle的数据,你的查询没有问题。 根据您的逻辑,它应该返回的唯一一行是一行,该行包含父类型为NULL的值

MySQL逻辑与您的完全不同: 当您使用or时!=运算符时,将忽略空值,并且永远不会返回。 如果还希望获得空值,请执行以下操作:

AND (`user_activity`.`parent_type` <> 'ALBUM' OR `user_activity`.`parent_type` IS NULL)
还是这个

AND coalesce(`user_activity`.`parent_type`,'whateveryouwanthere') <> 'ALBUM' 

这很好地解释了这个问题。
AND (`user_activity`.`parent_type` <> 'ALBUM' OR `user_activity`.`parent_type` IS NULL)
AND coalesce(`user_activity`.`parent_type`,'whateveryouwanthere') <> 'ALBUM'