MySQL: 选择某列为空的行
MySQL: 选择某列为空的行
我遇到了一个问题,当我尝试选择具有某列的NULL值的行时,它返回一个空集。然而,当我在phpMyAdmin中查看表时,大多数行的值显示为null。
我的查询看起来像这样:
SELECT pid FROM planets WHERE userid = NULL
每次都是空集。
很多地方说要确保它不是存储为"NULL"或"null"而不是实际值,并且有人建议尝试只查找一个空格(userid = ' '
),但这些方法都没有起作用。有一个建议是不要使用MyISAM而是使用InnoDB,因为MyISAM在存储null时有问题。我将表切换为InnoDB,但现在我觉得问题可能是它实际上并不是null,因为它可能会转换它的方式。我希望能够在不重新创建表格为InnoDB或其他方式的情况下解决这个问题,但如果必须的话,我可以尝试那样做。
MySQL: 选择包含空值的行
当我们在MySQL中查询一个包含空值的列时,可能会遇到一些问题。在这篇文章中,我们将探讨这个问题的原因以及解决方法。
问题的原因是,当我们使用expr = NULL
来测试列值是否为空时,查询结果将不如预期。实际上,根据MySQL的官方文档,在SQL中,NULL值与任何其他值(包括NULL本身)进行比较时都不会返回true。这就是为什么expr = NULL
的表达式永远不会为真的原因。
解决方法是使用IS NULL
和IS NOT NULL
操作符来测试空值。具体来说,IS NULL
用于测试一个值是否为空,而IS NOT NULL
用于测试一个值是否不为空。
为了解决问题,我们可以使用以下代码来查询包含空值的行:
SELECT pid FROM planets WHERE userid IS NULL;
使用IS NULL
操作符可以确保我们得到预期的结果。此外,MySQL还提供了其他比较操作符,供我们参考。
总之,在MySQL中查询包含空值的列时,我们应该避免使用expr = NULL
的比较方式,而是使用IS NULL
和IS NOT NULL
操作符来进行判断。这样可以确保我们得到正确的查询结果。
MySQL中的NULL是特殊的,你必须使用WHERE field IS NULL
,因为NULL不能等于任何东西,
包括它自己(即:NULL = NULL总是false)。
参见Rule 3
https://en.wikipedia.org/wiki/Codd%27s_12_rules
它是未知的-而不是false。SQL使用三值逻辑。
NULL = NULL实际上不是FALSE-它再次是NULL。但它也不是TRUE,所以IF(NULL = NULL)不会执行。
另请参见答案:SELECT 1 <=> 1,NULL <=> NULL,1 <=> NULL; -> 1, 1, 0
NULL不仅不等于任何东西,而且也不不等于任何东西。换句话说,select * from foo where bar <> "abc"
不会返回bar为null的行。这让我困惑了一整天。文档称<>
为“不等于”运算符,但实际上它是“等于除了某个值以外的东西”的运算符。
MySQL: 选择某一列值为null的行
在MySQL中,有时候我们需要查询某一列值为null的行。这篇文章将介绍为什么会出现这个问题以及解决方法。
问题的原因:
- 数据库中的某一列存在null值,我们想要查询这些行。
解决方法:
使用IS NULL关键字来查询某一列值为null的行。示例代码如下:
SELECT column_name FROM table_name WHERE column_name IS NULL;
其中,column_name是要查询的列名,table_name是要查询的表名。
在我们的示例中,我们想要查询planets表中userid列值为null的行,代码如下:
SELECT pid FROM planets WHERE userid IS NULL;
这将返回planets表中userid列值为null的行的pid。
通过使用IS NULL关键字,我们可以轻松地查询某一列值为null的行。这对于我们在数据库中进行数据分析和处理非常有帮助。