我注意到 MySQL 中有一些奇怪的东西,我想知道它为什么会这样,以及有什么方法可以改变它?
设想
我有帐户 InnoDB 表,id, name, type其中包含类型为可为空的以下列。
现在,假设我有 10 条记录,其中 type = "TEST" 和 100 条记录,type IS NULL以及 20 条记录,其中 type = "STANDARD"
如果我运行这个查询
SELECT * FROM accounts WHERE type <> "TEST"
Run Code Online (Sandbox Code Playgroud)
此查询将仅向我显示 type = "STANDARD" 的 20 条记录,并忽略具有空值的 100 条记录。
要解决这个问题,我将不得不做这样的事情
SELECT * FROM accounts WHERE IFNULL(type,"") <> "TEST"
Run Code Online (Sandbox Code Playgroud)
或者
SELECT * FROM accounts WHERE (type <> "TEST" OR type IS NULL)
Run Code Online (Sandbox Code Playgroud)
NULL 值表示空白“又名无值”,无值表示 <>“TEST”
这可能是预期的行为,但我不确定为什么会这样设计
SELECT * FROM accounts WHERE type <> "TEST"
Run Code Online (Sandbox Code Playgroud)
该声明的含义是,
“选择accounts列值type不等于‘TEST’的行”。
type这意味着 MySQL 返回值不等于“TEST”的记录。
现在在这里,因为NULL意味着没有值,所以它不会返回那些没有任何type列值的记录。
| 归档时间: |
|
| 查看次数: |
2518 次 |
| 最近记录: |