mysql搜索与空值不一致

时间:2012-08-21 15:54:59

标签: mysql null

我正在使用MySQL社区版5.1。这是一个奇怪的问题。我有一个表格,其中某个列值为null。让我们说我们有

table1

| col_1 |   id  |
 null    1

当我这样做时:

select col_1 from table1 where id = 1

我得到了这个 - >

| col_1 |
 null

但是当我这样做时:

select col_1 from table1 where id = 1 and col_1 != "x";

查询不会返回任何结果。

我希望此处的第二个查询返回与第一个查询相同的内容,因为col_1的值显然不是" x"。为什么会这样?我可以对第二个查询做什么,以便它以应有的方式工作,即。返回id = 1的行和col_1的所有值,除了" x"?

谢谢!

3 个答案:

答案 0 :(得分:3)

请参阅The Behavior of NULLs in SQL

  

涉及NULL的两个值之间的布尔比较返回   在SQL的三值逻辑中既不是真也不是假,而是未知的。 [3]   例如,NULL既不等于NULL也不NULL不等于NULL   真正。测试值是否为NULL需要表达式,例如   IS NULL或IS NOT NULL。

因此,您可以将查询更改为:

select col_1 
from table1 
where id = 1 
    and (col_1 is null or col_1 != 'x');

答案 1 :(得分:3)

正如其他人所提到的,与一个或多个NULL个操作数进行比较会产生NULL。您可以使用MySQL的NULL-safe equality operator<=>

SELECT col_1 FROM table1 WHERE id = 1 AND NOT col_1 <=> "x"

答案 2 :(得分:1)

在mysql中使用!=将NULL与值进行比较会产生意外结果。这是SQL的一个愚蠢的怪癖(抱歉,我没有更好的答案)NULL对他们来说意味着“没有价值”因此无法进行比较。见http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

尝试:

select col_1 from table1 where id = 1 and (col_1 != "x" OR col_1 IS NULL);