如何从两个数据库中选择唯一数据

时间:2014-12-24 13:45:33

标签: java database

我有两个数据库;数据库A和数据库B.数据库A在我的计算机中,数据库B在托管服务器中。这两个数据库包含具有相同数据类型的相同表,但数据库A将包含比数据库B更多的数据。我想从数据库A中选择所有唯一数据。

数据库A表A

Id  | FName      | LName
-----------------------------
1   | Jhone      | A
2   | Alice      | B
3   | Bob        | C 

数据库B表A

Id  | FName      | LName
-----------------------------
1   | Jhone      | A

我想选择:

2   | Alice      | B
3   | Bob        | C 

我该怎么做?

2 个答案:

答案 0 :(得分:0)

选项1

好的,这样做的无聊(和硬)方法是向单独的数据库发出单独的SQL查询,然后编写一堆java来比较结果。这完全可以完成,但是哎哟。

如果您需要定期执行此类操作,则应使用联合数据库或虚拟数据库工具。基本上这些工具的作用是创建一个虚拟的超级数据库"它包含您需要在其中查询的两个。因此,您可以连接到虚拟数据库并发出针对这两个数据库的SQL查询。

一个简单的例子是UnityJDBC。如果你四处搜索,还有其他人,比如VJDBC

然后,您只需针对两个DB编写单个SQL查询,即可为您提供所需内容,即going to be a left join from Database A Table A to Database B table A

在UnityJDBC中,它可能是这样的:

SELECT ID, FName, Lname
FROM Database_A.TableA, Database_B.TableB
LEFT JOIN Database_B.TableB ON Database_A.TableA.ID = Database_B.TableB.ID;

这个查询并不复杂,但只有你使用虚拟数据库层才能实现。

选项2

使用提取,翻译和加载工具(如Pentaho Kettle)将数据从一个提取到另一个。您可以使用GUI应用程序执行此操作,也可以使用他们的开源Java库并将其构建到您的应用程序中。

答案 1 :(得分:0)

如果您只需要执行一次,并且数据不是太大

  • 将两个表格导出为CSV
  • 将它们放在同一个盒子上
  • 使用grep查找A中不在B

    中的列

    grep -vf DB_B_Table_A.csv DB_A_Table_A.csv