З'єднання таблиць різних баз даних

завдання
Ви хочете використовувати таблиці в з'єднанні, але вони розташовані в різних базах даних.

Рішення
Використовуйте специфікатор імені бази даних, щоб повідомити 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;

Схожі статті