首页 文章

MySQL:选择列为空的行

提问于
浏览
217

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

我的查询看起来像这样:

SELECT pid FROM planets WHERE userid = NULL

每次都清空 .

许多地方说要确保它不是存储为"NULL"或"null"而不是实际值,并且有人说要尝试寻找一个空间( userid = ' ' ),但这些都没有奏效 . 有人建议不要使用MyISAM并使用innoDB,因为MyISAM存储无效 . 我把表切换到innoDB,但现在我觉得问题可能是它仍然不喜欢这样做而不必重新创建表作为innoDB或其他任何东西,但如果我必须,我当然可以尝试 .

8 回答

  • 10

    还有一个 <=> 运算符:

    SELECT pid FROM planets WHERE userid <=> NULL
    

    会工作 . 好消息是 <=> 也可以与非NULL值一起使用:

    SELECT NULL <=> NULL 收益 1 .

    SELECT 42 <=> 42 也收益 1 .

    看这里:https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to

  • 34

    将数据库从Access转换为MySQL(使用vb.net与数据库通信)时,我遇到了同样的问题 .

    我需要评估字段(字段类型varchar(1))是否为空 .

    这个陈述适用于我的场景:

    SELECT * FROM [table name] WHERE [field name] = ''
    
  • 0

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

    包括它自己(即:NULL = NULL总是假的) .

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

  • 54

    有同样问题的地方查询:

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

    没有返回值 . 似乎是MyISAM的一个问题,对InnoDB中的数据的相同查询返回了预期的结果 .

    跟着:

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

    返回所有预期结果 .

  • 11
    SELECT pid FROM planets WHERE userid IS NULL
    
  • 449

    来自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
    
  • 6
    SELECT pid FROM planets WHERE userid is null;
    
  • 1

    由于所有人都给出了答案,我想补充一点 . 我也面临同样的问题 .

    为什么查询失败?你有,

    SELECT pid FROM planets WHERE userid = NULL;
    

    这不会给你预期的结果,因为从mysql doc

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

    强调我的 .

    要搜索NULL值的列值,不能使用expr = NULL测试 . 以下语句不返回任何行,因为对于任何表达式,expr = NULL永远不会返回true

    解决方案

    SELECT pid FROM planets WHERE userid IS NULL;
    

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

相关问题