Выполнение естественного объединения двух таблиц в двух разных базах данных

У меня есть две таблицы: 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;
Другие вопросы по тегам