MySQL / 12. Использование нескольких таблиц

Соединение таблиц разных баз данных

Задача
Вы хотите использовать таблицы в соединении, но они расположены в разных базах данных.

Решение
Используйте спецификатор имени базы данных, чтобы сообщить 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;

Статьи по MySQL на эту тему:

Вставка записей в таблицу, включающую значения из другой
Вывод списков для записей «главная-подчиненная» и итогов
Вычисление разности между последовательными строками
Вычисление рейтинга команд
Выявление и удаление несвязанных записей