MySQL - = ""和 != ""关于 null 的不同行为

标签 mysql sql null string

这可能是个愚蠢的问题,但 null 似乎既不等于也不不等于任何空字符串 ""。

我有一个包含以下值的表:

id field1 field2 field3
1   a        b     c
2   null     b     c
3            b     c
4   a        b     c

我的查询

select * from table where field1 = ""

不返回 field1 值为空的第 2 行。这是绝对有道理的,因为 null 不等于空字符串。

但是,

select * from table where field1 != "" 

也不返回第 2 行。

有人能解释一下这个的历史渊源吗?是否因为值 null 意味着我们不知道该值,因此不知道 field1 是否等于或不等于第 2 行的空字符串?

最佳答案

NULL 不等于空。 NULL 不等于任何,包括NULL。要与 NULL 进行比较,您需要使用 IS NULLIS NOT NULL

SELECT NULL = NULL,
NULL != NULL,
NULL IS NULL,
NULL IS NOT NULL

NULL = NULL     NULL != NULL        NULL IS NULL    NULL IS NOT NULL
(null)             (null)            1                  0

SQL Fiddle

select * from table where field1 IS NULL

select * from table where field1 IS NOT NULL

关于MySQL - = ""和 != ""关于 null 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22968027/

相关文章:

python - 我的 python 脚本开始工作后服务器崩溃

mysql - 使用 if 条件过滤 SQL 查询

php - 尝试将日期插入日期时间列时出错

JavaScript 错误 : "null or not an object"

mysql - SQL如何删除特定列的重复行并保留一个

java - 日期值不正确 : '' for column 'DATESORTIE' at row 1

python - Pyspark:如何通过合并 Spark 中的值来展平嵌套数组

c# - 如何在 C# 和 MS SQL 中向参数化查询添加 "select all"值

python - Pandas 不承认 NaN 为空

sql - 如何从 SQL Server 2008 的查询结果中删除 'NULL'