选择值可能为null的位置

时间:2017-12-13 08:07:24

标签: mysql sql

我有一个查询

select c from DTO c where trafficLight = ?1

当交通灯为红色或绿色时,它会返回预期的行,但当红绿灯为空时,它不会返回任何内容。在数据库中,存在具有空交通灯的记录。我知道检查null是"是null",但这里最好的方法是什么?感谢。

1 个答案:

答案 0 :(得分:2)

  

我希望表达“where trafficLight =?1”来评估所有   例

运气不好我害怕

NULL是没有任何值,所以根据定义,如果对NULL使用等于运算符,它将永远不会返回true:

where NULL = NULL -- is never true

由于没有任何价值可供比较,因此根本无法知道它们是否相等,所以“不相等”也不起作用。我确实理解这很难遵循,但“它就是它”,并尝试尽可能NULL = NULL永远不是真的。然而,这适用于所有情况

where (trafficLight = ?1 and ?1 IS NULL)

where (trafficLight = 'red' or 'red' IS NULL)     -- true when trafficLight = 'red'
where (trafficLight = 'amber' or 'amber' IS NULL) -- true when trafficLight = 'amber'
where (trafficLight = 'green' or 'green' IS NULL) -- true when trafficLight = 'green'
where (trafficLight = NULL or NULL IS NULL)       -- true for all