Mysql无法选择表中的记录

时间:2016-05-02 03:52:09

标签: mysql select

我有一个mysql表,其中一个名为'status'的null-int int列,我在表中有两条记录,当另一条为NULL时,其中一条状态为2,但当我选择带有查询的记录时status!= 2',未显示记录(status = null)。

mysql> 
mysql> 
mysql> desc admin_user;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| acct_name   | varchar(32)      | YES  |     | NULL    |                |
| password    | varchar(32)      | YES  |     | NULL    |                |
| user_name   | varchar(32)      | YES  |     | NULL    |                |
| description | varchar(128)     | YES  |     | NULL    |                |
| status      | int(11)          | YES  |     | NULL    |                |
| role        | int(11)          | NO   |     | 1       |                |
| create_date | date             | YES  |     | NULL    |                |
| update_date | date             | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)

mysql> select id, acct_name, status from admin_user;
+----+-----------+--------+
| id | acct_name | status |
+----+-----------+--------+
|  1 | letme     |   NULL |
|  3 | admin     |      2 |
+----+-----------+--------+
2 rows in set (0.00 sec)

mysql> select id, acct_name, status from admin_user where status=2;
+----+-----------+--------+
| id | acct_name | status |
+----+-----------+--------+
|  3 | admin     |      2 |
+----+-----------+--------+
1 row in set (0.00 sec)

mysql> select id, acct_name, status from admin_user where status IS NULL;
+----+-----------+--------+
| id | acct_name | status |
+----+-----------+--------+
|  1 | letme     |   NULL |
+----+-----------+--------+
1 row in set (0.00 sec)

mysql> select id, acct_name, status from admin_user where status!=2;
Empty set (0.00 sec)

mysql>

如您所见,使用查询“status!= 2”无法选择状态为NULL的记录。我也试过'status<> 2'。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

Nulls真的是interesting

  

在您习惯之前,NULL值可能会令人惊讶。   从概念上讲,NULL表示“缺少未知值”并对其进行处理   与其他价值观略有不同。

还有什么

  

您不能使用算术比较运算符,例如=,<或<>至   测试NULL

有很多不同的方式来写这个。其中一个是:

select id, acct_name, status from admin_user where status IS NULL
  OR status != 2

正如@ shA.t建议的那样。

select id, acct_name, status from table1 where COALESCE(status, 0)  != 2

只需检查0确实是一个不会出现在表中任何其他位置的数字。