MySQL : null behavior against integer check

标签 mysql null

假设我有这张表:

CREATE TABLE `offers` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `status` int(11) DEFAULT NULL,
  )

并用这条记录填充它:

INSERT INTO offers (status) VALUES (null);

现在运行这个查询:

DELETE FROM offers WHERE STATUS <> 3 

我希望最新的记录从表中删除,但它没有。为什么?解决此类问题的正确方法是什么?

最佳答案

在 SQL 中,值 NULL 很特别!几乎所有具有 NULL表达式其中的值将计算为 NULL .这意味着当你执行 STATUS<>3 , 如果 STATUSNULL , 结果是 NULL ,当直接用作真值时,它是错误的。所以,表达式 WHERE STATUS <> 3选择值不是 3 的行。值为 3 的行和没有值的行(即 NULL)将被选中。唯一一次比较变量是 NULL如果您使用 IS NULL 可能是真的比较,或相关的特殊结构。如果您真的想使用 NULL,您可能需要查看手册的相关部分。以建设性的方式。

关于MySQL : null behavior against integer check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418416/

相关文章:

java - 链表 : What to substitute for node on the last node?

java - Google 云端点方法总是引发 NullPointerException,为什么?

mysql - SQL 选择条目及其关联图像

php - Laravel DB get() 很慢

mysql - 通过minicom super 终端向Mysql插入数据

c++ - Qt 读取访问冲突位于 :0x0, flags=0x0(第一次机会)

c# - 检查整数是否== null

c# - 在 C# 8 中有没有更短的写法?

php - 使用 PHP 设置导出 XLS 的样式

php - 如何循环遍历多维数组并相应地执行查询?