Mysql SELECT COUNT(DISTINCT`Table`.`ID`)仅对特定表返回0

Mysql SELECT COUNT(DISTINCT`Table`.`ID`)仅对特定表返回0,mysql,ruby-on-rails,kaminari,Mysql,Ruby On Rails,Kaminari,在使用rails_admin应用程序管理数据库时,我们注意到底部的两个表“Signals”和“SignalsHistory”的分页缺失,它只是说其中有0个,尽管可以看到视图中列出的记录 进一步的调查使我检查了开发日志,并查看了rails执行什么查询来获取分页的行数 SELECT COUNT(DISTINCT `SignalsHistory`.`ID`) FROM `SignalsHistory` LEFT OUTER JOIN `Signals` ON `Signals`.`ID` = `Sig

在使用rails_admin应用程序管理数据库时,我们注意到底部的两个表“Signals”和“SignalsHistory”的分页缺失,它只是说其中有0个,尽管可以看到视图中列出的记录

进一步的调查使我检查了开发日志,并查看了rails执行什么查询来获取分页的行数

SELECT COUNT(DISTINCT `SignalsHistory`.`ID`) FROM `SignalsHistory` LEFT OUTER JOIN `Signals` ON `Signals`.`ID` = `SignalsHistory`.`SignalsID`
这是回报

+---------------------------------------+
| COUNT(DISTINCT `SignalsHistory`.`ID`) |
+---------------------------------------+
|                                     0 |
+---------------------------------------+
我知道我的表中实际上有16196个ID字段的唯一实例,因为它是主键。以下是供比较的表格:

mysql> describe SignalsHistory;
+----------------+-------------+------+-----+----------------------+----------------+
| Field          | Type        | Null | Key | Default              | Extra          |
+----------------+-------------+------+-----+----------------------+----------------+
| ID             | int(11)     | NO   | PRI | NULL                 | auto_increment |
| SignalsID      | int(11)     | NO   | MUL | NULL                 |                |
| CreateDateTime | datetime(6) | YES  |     | CURRENT_TIMESTAMP(6) |                |
| Register       | int(11)     | YES  |     | NULL                 |                |
| RecordNo       | int(11)     | YES  |     | NULL                 |                |
| Invalid        | tinyint(1)  | YES  |     | NULL                 |                |
+----------------+-------------+------+-----+----------------------+----------------+
6 rows in set (0.00 sec)
当在不同的表(如
设备
ID
站点
ID
等)上使用时,此查询返回正确数量的结果,但不在此表上

为了确认我实际上可以在没有DISTINCE子句的情况下计算它们,我在没有DISTINCE子句的情况下再次运行了它:

mysql> SELECT COUNT(`SignalsHistory`.`ID`) FROM `SignalsHistory` LEFT OUTER JOIN `Signals` ON `Signals`.`ID` = `SignalsHistory`.`SignalsID`;
+------------------------------+
| COUNT(`SignalsHistory`.`ID`) |
+------------------------------+
|                        16196 |
+------------------------------+
1 row in set (0.01 sec)
我在网上查看了DISTINCT为什么会破坏我的计数查询,然后我找到了我试图模仿的结果,看看我是否能让它工作,就像这样:

mysql> SELECT COUNT(*) FROM (SELECT DISTINCT ID FROM SignalsHistory WHERE ID IS NOT NULL) test;
+----------+
| COUNT(*) |
+----------+
|    16196 |
+----------+
1 row in set (0.00 sec)
还是不工作,我向你们大家求助。我对这件事感到很紧张,但我真的不知道发生了什么,因为它似乎仅限于这张桌子

我知道最近在MySQL中,
Signal
是一个保留字,这就是我避免显式使用它的原因。“信号历史”会搞乱这件事吗

我的MySQL版本是:

mysql --version
mysql  Ver 14.14 Distrib 5.6.33, for debian-linux-gnu (x86_64) using  EditLine wrapper

正如所评论的,这是MySQL中的一个连接。

为什么有
左外部连接
?它不会更改匹配的行数,而是rails_admin和kaminari添加到查询中的内容。没有它也一样。谢谢你像MYSQL bug一样带来了这一点。如果您正在计算
信号,则可能会发生这种情况。如果没有匹配项,则ID
,但我不知道
信号存储如何发生。ID
信号
是保留字,但
信号
信号存储
不是保留字,因此这不应该是问题。可能是以下错误: