【问题标题】:mysql select query can not fetch data with null valuemysql select查询无法获取具有空值的数据
【发布时间】:2016-06-07 04:46:05
【问题描述】:

在此表中,如果我进行以下查询

select * from table where order_id != 1

我想,我应该得到第 18 和 19 行。但是,查询不能不获取任何行。

我可以这样重写查询

select * from table where (order_id != 1 or order_id is null)

它会获取预期的数据,但不应该是第一个查询能够获取行号18 & 19

【问题讨论】:

  • 表格中order_id的数据类型是什么?
  • tinyint(4) Null(Yes) Default(NULL)
  • 伙计,这是要知道的事情之一,功能方面,你应该使用<> 而不是!=,因为它不是一个直接的二进制比较。检查这两个线程,您应该可以更好地理解! :) thread_1 , thread_2
  • select * from table where order_id <> 1 也不起作用,没有选择行
  • select * from table where order_id <> 1 or order_id is NULL ,您的查询将不考虑 NULL 行好友! :)

标签: mysql null


【解决方案1】:

来自Docs

在您习惯之前,NULL 的值可能会令人惊讶。从概念上讲,NULL 表示“a missing unknown value”,它的处理方式与其他值有些不同。

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

您不能使用诸如=, <, or <> 之类的算术比较运算符来测试NULL

由于与NULL 的任何算术比较结果也是NULL,因此您无法从此类比较中获得任何有意义的结果。

【讨论】:

  • 是的,非常令人惊讶:)
  • 非常真实的“IS NULL”或“IS NOT NULL”完美运行
【解决方案2】:

Null 是 Null 不是无限数!

解决方案:

  • order_id设置一个默认值;特别是如果它是外键并且应该与其他表连接。
  • 使用 IFNULL 函数将您的查询更改为:
    select * from table where ifnull(order_id,-1) != 1
    
  • 【讨论】:

      【解决方案3】:

      SQL 运算符 !=<> 仅适用于值。 NULL 不是一个价值——它只是没有价值。
      检查这个答案,你可能会发现这很有用: Not equal <> != operator on NULL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-24
        • 2021-12-12
        相关资源
        最近更新 更多