mysql - MySQL 中不可能的行计数

标签 mysql count

我不知道 MySQL 内部是如何工作的,但我确信索引或一些关于表计数的元信息存在一些问题:

mysql> select count(*) from Event;
+----------+
| count(*) |
+----------+
|     5925 |
+----------+
1 row in set (0,01 sec)

mysql> select count(*) from Event where event_id in (select discount_event_id from Discount);
+----------+
| count(*) |
+----------+
|     5901 |
+----------+
1 row in set (0,12 sec)

mysql> select count(*) from Event where event_id not in (select discount_event_id from Discount);
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0,11 sec)

这些 24 缺少 event_id 是没有意义的。从我的角度来看,这在逻辑上是不可能的。不能有 24 行既在又不在另一个集中。或者是,或者不是。

此外,正如一些答案和评论所建议的那样,没有NULL event_id,因为它们是rowids:

mysql> select count(*) from Event where event_id is null;
+----------+
| count(*) |
+----------+
|        0 |
+----------+

这是怎么回事?

最佳答案

表示有24个event_idNULL

select count(*) from Event where event_id IS NULL

当您与被强制为FALSE 因此从两个结果集中省略。

关于mysql - MySQL 中不可能的行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470947/

相关文章:

mysql - 获取具有计数的不同记录

sql - 将计数追加为表列

mysql - 如何对两个不同的表进行计数,然后将它们相加得出总数?

php - 自动按计划打印 pdf

php - 按数据表中的月份对数据库表中的数据进行分组

mysql - 当 COUNT 返回 null 时如何插入零? MySQL

Mysql 计数出现在 2 列中的 id

php - 如何处理数组中的空值

javascript - 如何在 Electron 应用程序中本地保存图像

mysql - MYSQL 中的子分区