Задача
Вы хотите использовать таблицы в соединении, но они расположены в разных базах данных.
Решение
Используйте спецификатор имени базы данных, чтобы сообщить MySQL, где следует искать таблицы.
Обсуждение
Бывают ситуации, когда необходимо выполнить соединение двух таблиц, расположенных в разных базах данных. Для этого укажите имена столбцов и таблиц достаточно полно для того, чтобы MySQL могла понять, на что именно вы ссылаетесь. Мы использовали таблицы shirt и tie, неявно подразумевая, что обе они находятся в базе данных cookbook, так что можно ссылаться на таблицы, не указывая имени базы данных. Например, следующий запрос извлекает сочетания элементов двух таблиц:
mysql> SELECT shirt.item, tie.item FROM shirt, tie;
+-----------+--------------+
| item | item |
+-----------+--------------+
| Pinstripe | Fleur de lis |
| Tie-Dye | Fleur de lis |
| Black | Fleur de lis |
| Pinstripe | Paisley |
| Tie-Dye | Paisley |
| Black | Paisley |
| Pinstripe | Polka Dot |
| Tie-Dye | Polka Dot |
| Black | Polka Dot |
+----------+--------------+
Но предположим, что таблица shirt находится в базе данных db1, а tie – в базе данных db2. Чтобы сообщить об этом MySQL, перед именем каждой таблицы добавим префикс, определяющий базу данных, к которой относится таблица. Соединение с полной формой указания имен выглядит так:
SELECT db1.shirt.item, db2.tie.item FROM db1.shirt, db2.tie;
Если текущая база данных не выбрана, или это база данных, отличная от db1 и db2, необходимо указывать имена в полной форме. Однако если db1 или db2 является текущей базой данных, то можно обойтись без некоторых спецификаторов. Например, если текущая база данных – db1, то можно опустить спецификаторы db1:
SELECT shirt.item, db2.tie.item FROM shirt, db2.tie;
И наоборот, если текущей базой данных является db2, то нет необходимости в префиксах db2:
SELECT db1.shirt.item, tie.item FROM db1.shirt, tie;