2013-07-03 6 views
0

두 개의 다른 데이터베이스 (p와 q)에 두 개의 테이블 : p.Test와 q.Test가 있습니다.두 개의 서로 다른 데이터베이스에서 두 테이블의 자연 조인 수행

이 두 테이블은 서로 다른 MYSQL 연결을 가지고 있으며 두 개의 다른 서버에 있습니다.

여기 주어진대로 자연이 가입 할 필요가 : http://www.microshell.com/database/sql/comparing-data-from-2-database-tables/2/

가 어떻게 가능성이 그렇게 할 수 있습니까? 나는 실제로 쿼리를 실행하기 위해 Java PreparedStatement도 사용하고 있습니다. 가능하게 할 수있는 방법이 있습니까? 당신이 MySQL을 사용하는 경우 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 

다음과 같이 쿼리에서 테이블 이름 앞에 데이터베이스 이름을 지정할 수 있습니다 정직 할 수 있습니다에서

select 
    * 
from 
    LocalTable, 
     [OtherServerName].[OtherDB].[dbo].[OtherTable] 
+0

DB1과 DB2가 다른 서버에 있고 다른 연결이 필요한 경우에도 작동합니까? –

+1

크로스 서버의 경우 쿼리에서 서버 이름을 지정할 수 있습니다 –

+0

흠 ... UserName과 PassWord가 포함되어 있습니까? 아니면 사전에 연결해야합니까? –

-1

다음 데이터베이스 스키마에 해당 :

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

가 나는 PreparedStatement의 화재 어떻게도 말을 할 수있는 :

내가 그들 각각 두 개의 연결을 만들 말해봐. 는 그래서

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

완전히 다른 데이터베이스에있을 수 있습니까? –

+0

네가 같은 mysql 인스턴스에 있다면 그렇다. 그리고 당신은 심지어 두 개의 연결이 필요하지 않습니다 – chetan

+0

그래서 각각의 다른 연결을 사용하면 ... 작동하지 않습니까? –

0

같은 다른 서버에 대한 사용자 servernames 다른 답변에서 의견을 말하면 다른 데이터베이스 서버의 두 테이블을 비교해야합니다. 이 경우 federated storage engine을 사용해야합니다. 이것은 데이터베이스 서 v에서 수행해야하는 변경입니다. Java 코드에서는 그렇게 할 수 없습니다.

Java로 수행해야하며 데이터베이스에서 수정할 수없는 경우 모든 데이터를 메모리로 다운로드하고 수동으로 비교해야합니다.

+0

효율적인 방법은 무엇입니까? 두 개의 Hashmaps에있는 모든 데이터를 가져 와서 비교하는 것은 어떻습니까? http://stackoverflow.com/questions/12721735/how-to-receive-difference-of-maps-in-java –

+1

[데이터베이스 복제] (http : //dev.mysql .com/doc/refman/5.0/ko/replication.html)을 사용하면 테이블을 동기화 상태로 유지할 수 있으므로 수동으로 관리 할 필요가 없습니다. –

0

복제본을 다시 현재 데이터베이스의 다른 테이블로 옮긴 다음 비교하십시오.

관련 문제