我在 MySQL 中有下表。
city_data
+------+-----------+-------------+
| id | city_code | city_name |
+------+-----------+-------------+
| 4830 | BHR | Bharatpur |
| 4831 | KEP | Nepalgunj |
| 4833 | OHS | Sohar |
| 4834 | NULL | Shirdi |
+------+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)
和下面的查询。
从 city_data 中选择 id、city_code、city_name,其中 city_code != 'BHR';
我本来期待 3 排。
| 4831 | KEP | Nepalgunj |
| 4833 | OHS | Sohar |
| 4834 | NULL | Shirdi |
+------+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)
但只得到 2 行。
| 4831 | KEP | Nepalgunj |
| 4833 | OHS | Sohar |
+------+-----------+-------------+
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么行
| 4834 | NULL | Shirdi |
Run Code Online (Sandbox Code Playgroud)
不包含在我的查询结果中。应该已经传递了 where 条件(NULL != 'BHR')。
请哪位大神帮忙解疑一下。
根据MySQL 参考手册,第 3.3.4.6 节:使用 NULL 值,原因如下:
由于与 NULL 的任何算术比较的结果也是 NULL,因此您无法从此类比较中获得任何有意义的结果。
在 MySQL 中,0 或 NULL 表示 false,其他任何值表示 true。布尔运算的默认真值是 1。
这意味着NULL != 'BHR'将计算为NULL,而这又意味着falseMySQL。为了使查询按您想要的方式工作,您必须附加OR city_code IS NULL到查询中。
| 归档时间: |
|
| 查看次数: |
1912 次 |
| 最近记录: |