比较MYSql中的NULL值

时间:2015-04-10 06:13:13

标签: mysql sql

我在where子句中有条件:

LocationId=IFNULL(LocId,LocationId)

这里LocId是NULL所以由IFNUll返回的LocationId也是Null在这种情况下这个查询没有返回任何东西。 请告诉我解决方案。

4 个答案:

答案 0 :(得分:3)

您可以使用null safe comparison运算符:

LocationId <=> IFNULL(LocId, LocationId)

常规=运算符之间的区别在于null值不被视为特殊值,例如如果左手和右手参数均为null,则会产生1

有关更多示例,另请参阅this answer

答案 1 :(得分:1)

mysql NULL不等于NULL,请点击此处https://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

  

因为与NULL进行任何算术比较的结果也是如此   NULL,您无法从此类比较中获得任何有意义的结果。

     

在MySQL中,0或NULL表示false,其他任何表示都是true。该   布尔运算的默认值为1。

所以,你的逻辑应该是这样的:

select ...
from ...
where
(
    (LocId is null and LocationId is null)
    OR
    (LocId is not null and LocationId = LocId)
)

你可以把它写得更短,通常Ids是正值,所以你可以比较:

select ...
from ...
where
ifnull(LocId, -1) = ifnull(LocationId, -1)

更新:在mysql中也存在非ansi标准null-safe comparison,这更短,请查看@Ja͢ck回答

答案 2 :(得分:1)

您应该明白,您不能使用任何relational operator with NULL

唯一的选择是使用IS NULLIS NOT NULL<=>

所以你需要尝试这样:

LocId IS NULL and LocationId IS NULL
OR
LocId IS NOT NULL and LocationId = LocId

答案 3 :(得分:0)

试一试:

LocationId=IFNULL(LocId,LocationId)
AND LocationId IS NOT NULL

或者

LocationId=COALESCE(LocId,LocationId)