2013-07-03 25 views
0

我有兩個表:p.Test和q.Test在兩個不同的數據庫 - p和q上。在兩個不同的數據庫中的兩個表上做一個自然聯接

這兩個表都有不同的MYSQL連接,位於兩臺不同的服務器上。

我需要做一個自然的加入這裏給出: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); 

如何激發一個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

嗯......包括用戶名和密碼?或者我必須事先連接? –

-1

如果你正在使用MySQL數據庫則相當於架構。 所以它是直線前進

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

他們可以在完全不同的數據庫? –

+0

是的,如果他們在相同的mysql實例。你甚至不需要兩個連接 – chetan

+0

所以,如果我使用不同的連接到他們每個人......它不會工作? –

0

從在其他答案中的評論,它看起來像你需要比較來自不同數據庫服務器的兩個表。在這種情況下,您必須使用federated storage engine。這是必須在數據庫服務器上完成的更改。你不能在你的Java代碼中做到這一點。

如果您必須使用Java來完成此操作,並且無法修改數據庫中的任何內容,則必須將所有數據下載到內存並手動進行比較。

+0

任何有效的方法來做到這一點?如何獲得兩個HashMap中的所有數據並對它們進行比較? http://stackoverflow.com/questions/12721735/how-to-receive-difference-of-maps-in-java –

+1

設置[數據庫複製]不是更好嗎(http://dev.mysql .com/doc/refman/5.0/en/replication.html)來保持你的表同步,所以你不必手動關心它? –

0

再次做你的副本,到當前數據庫的另一個表中,然後進行比較。

相關問題