mysql - 如果字段为空,为什么 SQL "NOT IN (' val 1')"不返回?

标签 mysql sql select null

我有这样一个查询:

Select *
FROM table1
WHERE field1 NOT IN ('value1')

如果该行的field1null,则不返回。 这对我来说看起来不合逻辑,因为 null 不是“value1”,所以应该返回该行,这会导致很多错误。 我知道由于某些原因它是这样工作的。它们是什么?

最佳答案

NULL 在 SQL 中不是一个值。

SELECT NULL = NULL
# => NULL
SELECT NULL != NULL
# => NULL

因此,

cause null is not 'value1'

NULL 也不是不是“value1”。 NULL 基本上是 SQL 表达“我不知道”的方式。所以它可能是“value1”,也可能不是。测试 NULL 的方法是

SELECT NULL IS NULL;
# => 1

因此,试试这个:

WHERE field1 NOT IN ('value1') OR field1 IS NULL

专门解决这个问题。

关于mysql - 如果字段为空,为什么 SQL "NOT IN (' val 1')"不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34737906/

相关文章:

mysql - 两个外键指向同一个主键 select 语句 MYSQL

mysql - 使用时间偏移修复数据库查询

javascript - 如何在 sequelize.js 中嵌套 SQL 函数?

MySQL:选择所有数据,但如果包含 ' * ' ,则显示最后四个字符

Java错误net.ucanaccess.jdbc.UcanaccessSQLException : unexpected token: ; required: (

Mysql SELECT CASE LIKE 给出 NULL 行

java - 在下面提到的场景中如何将列表传递给sql查询

mysql - 如何使用 Node js 将 mysql 结果传递给对象?

mysql - 通过读取另一个数据插入数据库

php - 循环使用 PHP 和 MySQL 的动态链接