如果'fk_building'为null,我已经意识到这两个查询不起作用。我不明白为什么,似乎找不到一个很好的解释,因为它有点难以谷歌。有人可以解释为什么地狱!= 3不会返回一切不是3 ???包括空行?为什么我需要使用< => ?
update floor set fk_building = 3 where fk_building != 3 and floor_id = 1;
或
select * from floor where fk_building != 3
在fk_building为空的情况下不起作用。
答案 0 :(得分:5)
我建议您查看Wikipedia上NULL
值的“常见错误”部分。
从条目:
例如,WHERE子句或条件语句可能会将列的值与常量进行比较。如果该字段包含Null,则通常错误地认为缺失值将“小于”或“不等于”常量,但实际上,此类表达式返回Unknown
正如用户建议的那样,如果您的RDBMS允许,您可以使用null安全操作符,或者检查IS NULL
。
答案 1 :(得分:1)
使用null安全操作符
update floor set fk_building = 3 where (not fk_building <=> 3) and floor_id = 1;
http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html
答案 2 :(得分:0)
为什么不这样做,而不是生气:
update floor set fk_building = 3 where (fk_building != 3 OR fk_building IS NULL) and floor_id = 1;
答案 3 :(得分:0)
您还可以使用x&lt; =&gt; 3来测试两者。
编辑:在你的情况下,它不是'x&lt; =&gt; 3'