Mysql无法选择表中的记录

Posted

技术标签:

【中文标题】Mysql无法选择表中的记录【英文标题】:Mysql can't select the record in the table 【发布时间】:2016-08-26 18:20:33 【问题描述】:

我有一个 mysql 表,其中有一个名为“status”的可空 int 列,表中有两条记录,其中一个状态为 2,而另一个为 NULL,但当我使用查询选择记录时' 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 的记录。我也试过'状态 2'。有人可以帮忙吗?

【问题讨论】:

试试COALESCE(status, 0) !=2 ;)。 是的,它有效。谢谢。 【参考方案1】:

空值实际上是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 确实是一个没有出现在表中其他任何位置的数字。

【讨论】:

NULL 就像 SQL 世界的 NaN。如果您不知道它是如何工作的,那可能会很奇怪。 谢谢大家,Null 在 SQL 世界里真的很奇怪!

以上是关于Mysql无法选择表中的记录的主要内容,如果未能解决你的问题,请参考以下文章

MySql 触发器删除同一张表中的子记录

如何从mysql中的表中选择N条记录

MySQL:PHP:由于警告,无法从表中获取数据

MySQL触发器:更新一张表中的记录,其中同一行中的记录匹配选择查询

MySQL在1个表中选择不同的记录并根据另一个表中的值计算每个组

无法使用oracle中的游标在表中插入记录