假设我有这张表:
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
, 如果 STATUS
是NULL
, 结果是 NULL
,当直接用作真值时,它是错误的。所以,表达式 WHERE STATUS <> 3
选择值不是 3 的行。值为 3 的行和没有值的行(即 NULL
)将不被选中。唯一一次比较变量是 NULL
如果您使用 IS NULL
可能是真的比较,或相关的特殊结构。如果您真的想使用 NULL
,您可能需要查看手册的相关部分。以建设性的方式。
关于MySQL : null behavior against integer check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418416/