我在MySQL中有下表。
city_data
+------+-----------+-------------+
| id | city_code | city_name |
+------+-----------+-------------+
| 4830 | BHR | Bharatpur |
| 4831 | KEP | Nepalgunj |
| 4833 | OHS | Sohar |
| 4834 | NULL | Shirdi |
+------+-----------+-------------+
以下查询。
从city_data中选择id,city_code,city_name,其中city_code!='BHR';
我期待3行。
| 4831 | KEP | Nepalgunj |
| 4833 | OHS | Sohar |
| 4834 | NULL | Shirdi |
+------+-----------+-------------+
但只能获得2行。
| 4831 | KEP | Nepalgunj |
| 4833 | OHS | Sohar |
+------+-----------+-------------+
我无法理解为什么行
| 4834 | NULL | Shirdi |
我的查询结果中不包含。应该传递where条件(NULL!='BHR')。
请有人帮忙解决疑问。
答案 0 :(得分:2)
根据MySQL Reference Manual, section 3.3.4.6: Working with NULL values,以下是原因:
因为与NULL进行任何算术比较的结果也是如此 NULL,您无法从此类比较中获得任何有意义的结果。
在MySQL中,0或NULL表示false,其他任何表示都是true。该 布尔运算的默认值为1。
这意味着NULL != 'BHR'
将评估为NULL
,这反过来意味着false
到MySQL。要使查询按您的方式工作,您必须将OR city_code IS NULL
附加到查询中。
答案 1 :(得分:0)
您无法将空值与!=
进行比较,因为它为空,请改用IS NULL
谓词:
select id,city_code,city_name
from city_data
where city_code != 'BHR' OR city_code IS NULL;
答案 2 :(得分:0)
无法使用比较运算符测试NULL值,例如=,<或<>。因此查询很容易混淆,并且忽略了NULL记录。欲了解更多信息,请转到https://www.w3schools.com/sql/sql_null_values.asp