【发布时间】:2012-05-28 13:05:05
【问题描述】:
我们在 MySQL 内部连接方面遇到了一些奇怪的问题。基本上,我们在使用 '=' 运算符时会遇到一个奇怪的错误,但使用 'like' 会使其正常工作。不幸的是,这是通过 ActiveRecord 实现的,没有简单的方法可以直接在其中打“赞”,而且我们想了解这里实际发生的情况。
这是失败的查询:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id = `site_versions`.version_id;
这是错误:
ERROR 1296 (HY000): Got error 20008 'Query aborted due to out of query memory'
from NDBCLUSTER
这是有效的查询:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id like `site_versions`.version_id;
以下是有关表格本身的一些详细信息:
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..]
+------------+--------------+------+-----+---------+----------------+
任何想法为什么“喜欢”有效而“=”无效?
【问题讨论】:
-
类似的东西真的能给出你期望的结果吗?也许它只是没有加入任何东西(因为对于整数意味着什么?),因此避免了有效查询触发的内存问题。
-
@andrewcooke - 嗯,
like在这样使用时似乎确实有效:sqlfiddle.com/#!2/86792/1 -
显示每个查询的
explain也可能有助于问题。 -
我认为您需要包含有关表的数据库引擎的信息。不同选项之间的字符串比较差异很大。
-
在我看来,您的查询信息量不大,它应该只为您提供 version_id 不为空的 site_versions 的计数,因此不需要加入。你能解释一下你想从数据中知道什么吗?
标签: mysql activerecord inner-join