我在where子句中有条件:
LocationId=IFNULL(LocId,LocationId)
这里LocId是NULL所以由IFNUll返回的LocationId也是Null在这种情况下这个查询没有返回任何东西。 请告诉我解决方案。
答案 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 NULL
或IS 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)