我有两个数据库;数据库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
我该怎么做?
答案 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)
如果您只需要执行一次,并且数据不是太大
使用grep查找A中不在B
中的列grep -vf DB_B_Table_A.csv DB_A_Table_A.csv