也许我只是错过了一些东西。由于问题太不具体,无法通过谷歌/搜索来查找,因此我现在在这里寻求帮助。在 MySQL
中测试我的问题:为什么此 SELECT 不输出 [ id=2 ]?
SELECT `id` FROM `testtable1` WHERE NOT (`key_boolean` = 1);
表定义和测试数据:
CREATE TABLE IF NOT EXISTS `testtable1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key_boolean` tinyint NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=1;
INSERT INTO `testtable1` (`key_boolean`) VALUES (1);
INSERT INTO `testtable1` () VALUES ();
表中现在存储:
编辑: 根据这些答案,我实际上在 StackOverflow 上发现了更多类似的问题。这篇文章非常适合 MySQL:MYSQL syntax not evaluating not equal to in presence of NULL
最佳答案
表达式key_boolean = 1
计算结果为 NULL
当key_boolean
是 NULL
。所以你中间有 NOT NULL
对于 NOT (key_boolean = 1)
。 NOT NULL
反过来,也计算为 NULL
。又如 NULL
不为 true(但也不为 false — 在 SQL 中 ternary logic 适用),则不会选择该行。
除少数情况外,所有比较操作,如 =
,评估为NULL
,如果它们的操作数之一是 NULL
。在本例中,MySQL 中一个值得注意的异常(exception)是 NULL
-safe equal <=>
,其行为就像您可能想要的那样。
您可以从测试表中选择(子)表达式并亲自查看它们的结果。
SELECT *,
key_boolean = 1,
NOT (key_boolean = 1),
key_boolean <=> 1,
NOT (key_boolean <=> 1)
FROM testtable1;
关于mysql - 为什么 'WHERE NOT' 与 NULL 行不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70601488/