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

问题描述 投票:2回答:1

在使用rails_admin应用程序管理我们的数据库时,我们注意到我们的两个表格底部的分页“信号”和“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)

当在不同的表上使用时,同样的查询返回正确的结果数(例如Devices.IDSites.ID等),但特别是在此表中没有。

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

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会破坏我的计数查询,然后我找到了this post然后我试图模仿我是否可以让它工作,如下:

mysql> SELECT COUNT(*) FROM (SELECT DISTINCT ID FROM SignalsHistory WHERE ID IS NOT NULL) test;
+----------+
| COUNT(*) |
+----------+
|    16196 |
+----------+
1 row in set (0.00 sec)

仍然没有工作,我转向你们所有人。我把头发拉过来,并不知道发生了什么,因为它似乎仅限于这张桌子。

我知道Signal最近在MySQL中是一个保留字,这就是为什么我要避免明确地使用它。 'SignalsHistory'可能会搞乱吗?

我的MySQL版本是:

mysql --version
mysql  Ver 14.14 Distrib 5.6.33, for debian-linux-gnu (x86_64) using  EditLine wrapper
mysql ruby-on-rails kaminari
1个回答
2
投票

正如Barmar评论的那样,这是MySQL中的known and long-standing bug

© www.soinside.com 2019 - 2024. All rights reserved.