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'