Występują pewne dziwne problemy z połączeniami wewnętrznymi MySQL. Zasadniczo, otrzymujemy nieparzysty błąd podczas używania operatora '=', ale użycie 'like' powoduje, że działa. Niestety, dzieje się tak za pośrednictwem ActiveRecord i nie ma prostego sposobu, aby zamiast tego po prostu policzyć "like", a ponadto chcemy zrozumieć, co się tutaj dzieje.MySQL INNER JOIN - '=' vs 'like'
Oto zapytanie, które nie:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id = `site_versions`.version_id;
Tutaj jest błąd:
ERROR 1296 (HY000): Got error 20008 'Query aborted due to out of query memory'
from NDBCLUSTER
Oto zapytanie, które działa:
mysql> SELECT COUNT(*) FROM `versions` INNER JOIN `site_versions`
ON `versions`.id like `site_versions`.version_id;
Oto kilka szczegółów na temat same tabele:
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..]
+------------+--------------+------+-----+---------+----------------+
Jakieś pomysły, dlaczego "jak" działa, a "=" nie?
to coś, co daje oczekiwane rezultaty? może po prostu nie dołącza do niczego (bo co to znaczy dla intów?), a więc unika problemu z pamięcią, który wyzwala prawidłowe zapytanie. –
@andrewcooke - Hmm, "jak" wydaje się działać, gdy jest używany w ten sposób: http://sqlfiddle.com/#!2/86792/1 –
Może to również pomóc w wyświetleniu "wyjaśnienia" każdego zapytania. –