在两个不同的数据库中对两个表进行自然连接

时间:2013-07-03 09:18:10

标签: java sql database prepared-statement natural-join

我有两个表: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

4 个答案:

答案 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]

答案 1 :(得分:0)

从其他答案的评论中,您似乎需要比较来自不同数据库服务器的两个表。在这种情况下,您必须使用federated storage engine。这是必须在数据库服务器上完成的更改。你不能在Java代码中这样做。

如果您必须使用Java进行操作并且无法修改数据库中的任何内容,则必须将所有数据下载到内存中并手动进行比较。

答案 2 :(得分:0)

再次将您的副本放入当前数据库的另一个表中,然后进行比较。

答案 3 :(得分:-1)

如果您使用的是mysql,则数据库等同于schema。 所以它很直接

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