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

时间:2016-10-11 19:52:59

标签: 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` = `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)

同一查询在不同的表格上使用时会返回正确的结果数量(例如DevicesIDSitesID等等,但不是特别是这张桌子。

为了确认我可以在没有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

1 个答案:

答案 0 :(得分:1)

Barmar评论说,这是MySQL中的known and long-standing bug