2013-07-03 2 views
0

У меня есть две таблицы: p.Test и q.Test на двух разных базах данных - p и q.Выполнение естественного соединения по двум таблицам в двух разных базах данных

Обе эти таблицы имеют разные подключения MYSQL и находятся на двух разных серверах.

мне нужно сделать Natural Join, как приведено здесь: http://www.microshell.com/database/sql/comparing-data-from-2-database-tables/2/

Как возможно это сделать? Я также использую java PreparedStatement, чтобы фактически запустить запрос. Есть ли способ сделать это?

Say создать два подключения к каждому из них:

Connection conn1 = DriverManager.getConnection(URLtoPDB, Username,Password); 
Connection conn1 = DriverManager.getConnection(URLtoQDB, Username,Password); 

Как огонь PreparedStatement, чтобы даже и сказать: select * from p.Test,q.Test

+0

* Почему вам нужно естественное соединение на двух таблицах в двух разных базах данных? –

+0

Чтобы узнать разницу в строках. –

+0

У меня есть эта реплицированная таблица в моей базе данных из другой, к которой у меня только есть доступ на чтение. Мне нужно проверить разницу между данными строк. Я думал, что это хороший способ сделать это. –

ответ

0

Вы можете указать имя базы данных перед именем таблицы в запросе, как показано ниже

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] 
+0

Будет ли это работать, даже если DB1 и DB2 находятся на разных серверах и требуют разных соединений? –

+1

Для кросс-сервера вы можете указать имена серверов в запросе –

+0

Хммм .... включая UserName и PassWord? ИЛИ я должен быть связан заранее? –

-1

Если вы используете MySQL, то база данных эквивалентна схеме. так прямо вперед

select * 
from p.Test natural join q.Test; 
+0

Могут ли они быть в совершенно разных Базах данных? –

+0

Да, если они находятся в одном экземпляре mysql. и вам даже не нужно два подключения – chetan

+0

Итак, если я использую другое соединение с каждым из них ... Это не сработает? –

0

От комментарии в других ответах, похоже, вам нужно сравнить две таблицы с разных серверов баз данных. В этом случае вы должны использовать federated storage engine. Это изменение, которое должно быть сделано на сервере базы данных. Вы не можете сделать это в своем Java-коде.

Если вам нужно сделать это на Java, и вы ничего не можете изменить в базе данных, вам необходимо загрузить все данные в память и сравнить их вручную.

+0

Любой эффективный способ сделать это? Как получить все данные в двух хэшмапах и сравнить их? http://stackoverflow.com/questions/12721735/how-to-receive-difference-of-maps-in-java –

+1

Не было бы лучше настроить [репликацию базы данных] (http: //dev.mysql .com/doc/refman/5.0/ru/replication.html), чтобы синхронизировать ваши таблицы, поэтому вам не нужно заботиться об этом вручную? –

0

Сделайте свою реплику еще раз, в другую таблицу текущей базы данных, а затем сравните.