sql查询不为空 - MySQL:选择列为空的行




mysql查询 (5)

SQL NULL的特殊,你必须做WHERE field IS NULL ,因为NULL不能等于任何东西,

包括它本身(即:NULL = NULL总是为false)。

Rule 3 https://en.wikipedia.org/wiki/Codd%27s_12_rules

我遇到了一个问题,当我尝试选择对某个列有NULL的行时,它将返回一个空集。 但是,当我在phpMyAdmin中查看表时,它对大多数行都表示为空。

我的查询看起来像这样:

SELECT pid FROM planets WHERE userid = NULL

每次都设置空集。

很多地方都说要确保它不是以“NULL”或“null”而不是实际值存储的,还有一个地方试图寻找一个空格( userid = ' ' ),但没有一个能够工作。 有人建议不要使用MyISAM并使用innoDB,因为MyISAM无法存储null。 我将表切换到innoDB,但现在我觉得问题可能是它仍然不是空的,因为它可能会转换它。 我想这样做,而不必重新创建表作为innoDB或其他任何东西,但如果必须,我当然可以尝试。


因为所有的答案都是我想补充的。 我也遇到了同样的问题。

为什么你的查询失败? 你有,

SELECT pid FROM planets WHERE userid = NULL;

这不会给你预期的结果,因为从MySQL文档

在SQL中, 与任何其他值(即使为NULL)相比NULL值都不会为真。 除非表达式中涉及的运算符和函数的文档中另有说明,否则包含NULL的表达式始终会生成NULL值。

强调我的。

要搜索NULL值的列值,您不能使用expr = NULL测试。 以下语句不返回任何行,因为对于任何表达式expr = NULL从不为真

SELECT pid FROM planets WHERE userid IS NULL; 

要测试NULL ,请使用IS NULLIS NOT NULL运算符。


来自http://w3schools.com/sql/sql_null_values.asp信息:

1)NULL值表示缺少未知数据。

2)默认情况下,表列可以保存NULL值。

3)NULL值与其他值的处理方式不同

4)不可能比较NULL和0; 它们并不等同。

5)使用比较运算符(例如=,<或<>)来测试NULL值是不可能的。

6)我们将不得不使用IS NULL和IS NOT NULL运算符

所以万一你的问题:

SELECT pid FROM planets WHERE userid IS NULL

查询时遇到同样的问题:

SELECT * FROM 'column' WHERE 'column' IS NULL; 

没有返回任何值。 似乎是MyISAM的问题,对InnoDB中的数据进行的相同查询返回了预期的结果。

带着:

SELECT * FROM 'column' WHERE 'column' = ' '; 

返回所有预期结果。


SELECT pid FROM planets WHERE userid IS NULL




null