Mysql SELECT COUNT(DISTINCT`Table`.`ID`)仅对特定表返回0
在使用rails_admin应用程序管理数据库时,我们注意到底部的两个表“Signals”和“SignalsHistory”的分页缺失,它只是说其中有0个,尽管可以看到视图中列出的记录 进一步的调查使我检查了开发日志,并查看了rails执行什么查询来获取分页的行数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
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
信号
是保留字,但信号
和信号存储
不是保留字,因此这不应该是问题。可能是以下错误: