我们在MySQL内部连接中遇到了一些奇怪的问题。基本上,我们在使用'='运算符时会遇到奇怪的错误,但是使用'like'会使它工作。不幸的是,这是通过ActiveRecord,而不是简单的方法,只是在那里巴掌'喜欢',而我们想知道这里实际发生了什么。MySQL INNER JOIN - '='vs'like'
这里是一个失败的查询:
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..]
+------------+--------------+------+-----+---------+----------------+
任何想法为什么'喜欢'的作品和'='不?
就像你期待的结果一样吗?也许它只是没有加入任何东西(因为int的意思是什么?),所以避免了有效查询触发的内存问题。 –
@andrewcooke - 嗯,'like'在使用这种方式时似乎工作:http://sqlfiddle.com/#!2/86792/1 –
它也可以帮助显示每个查询的'解释'的问题。 –