Eri*_*son 17 mysql activerecord inner-join
我们在MySQL内连接方面遇到了一些奇怪的问题.基本上,我们在使用'='运算符时会出现奇怪的错误,但使用'like'会使其工作.不幸的是,这是通过ActiveRecord,并没有简单的方法只是在那里打'喜欢',而且我们想要了解这里实际发生了什么.
这是失败的查询:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id = `site_versions`.version_id;
Run Code Online (Sandbox Code Playgroud)
这是错误:
ERROR 1296 (HY000): Got error 20008 'Query aborted due to out of query memory'
from NDBCLUSTER
Run Code Online (Sandbox Code Playgroud)
这是有效的查询:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id like `site_versions`.version_id;
Run Code Online (Sandbox Code Playgroud)
以下是表格本身的一些细节:
mysql> desc site_versions;
+----------------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| version_id | int(11) | YES | MUL | NULL | |
[..snip..]
+----------------------+----------+------+-----+---------+----------------+
mysql> desc versions;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
[..snip..]
+------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
任何想法为什么'喜欢'工作和'='不?
不确定这是否能解决您的问题,但有可能。不要使用count(*). 也许它对计算什么感到“困惑”。最佳实践是对特定字段进行计数,例如id。为此,您需要使用表的别名。
SELECT COUNT(v.id) FROM versions as v
INNER JOIN site_versions as sv ON v.id = sv.version_id;
Run Code Online (Sandbox Code Playgroud)