Выполнение естественного объединения двух таблиц в двух разных базах данных
У меня есть две таблицы: p.Test и q.Test для двух разных баз данных - p и q.
Обе эти таблицы имеют разные подключения MYSQL и находятся на двух разных серверах.
Мне нужно сделать Natural Join, как указано здесь: http://www.microshell.com/database/sql/comparing-data-from-2-database-tables/2/
Как я могу это сделать? Я использую Java PreparedStatement, чтобы фактически выполнить запрос. Есть ли способ сделать это?
Скажем, я создаю два соединения с каждым из них:
Connection conn1 = DriverManager.getConnection(URLtoPDB, Username,Password);
Connection conn1 = DriverManager.getConnection(URLtoQDB, Username,Password);
Как мне запустить подготовленное заявление, чтобы даже сказать: select * from p.Test,q.Test
4 ответа
Вы можете указать имя базы данных перед именем таблицы в запросе, как показано ниже
SELECT
*
FROM
[yourdatabase1].[jajal].[j]
NATURAL LEFT JOIN [yourdatabase2].[jajal_copy] jc
WHERE
jc.user_id IS NULL
UNION ALL
SELECT
*
FROM
[yourdatabase1].[jajal].[j]
NATURAL RIGHT JOIN [yourdatabase2].[jajal_copy] jc
WHERE
j.user_id IS NULL
вы можете использовать servernames для разных серверов как
select
*
from
LocalTable,
[OtherServerName].[OtherDB].[dbo].[OtherTable]
Сделайте свою реплику снова, в другую таблицу текущей базы данных и затем сравните.
Из комментариев в других ответах, похоже, вам нужно сравнить две таблицы с разных серверов баз данных. В этом случае вы должны использовать объединенное хранилище. Это изменение, которое должно быть сделано на сервере базы данных. Вы не можете сделать это в своем коде Java.
Если вам нужно сделать это на Java, и вы ничего не можете изменить в базе данных, вы должны загрузить все данные в память и сравнить их вручную.
Если вы используете mysql, то база данных эквивалентна схеме. так что прямо
select *
from p.Test natural join q.Test;