我們在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 –
它也可以幫助顯示每個查詢的'解釋'的問題。 –