Java - 合并来自不同数据源中的 2 个表的数据

Posted

技术标签:

【中文标题】Java - 合并来自不同数据源中的 2 个表的数据【英文标题】:Java - Merge data from 2 tables in different data source 【发布时间】:2021-08-07 14:31:49 【问题描述】:

我有一个用例,我必须合并来自 2 个表(位于不同数据源中)的数据。 考虑每个表都有员工数据(名字、姓氏、电话号码)。对于每个员工,我必须合并两个表中的 phoneNumber 数据,其他数据将保持与表 1 中的相同

    如果表 1 和表 2 中都存在员工数据,则 phoneNumber 数据将合并为逗号分隔值,其他数据将来自表 1 如果员工仅出现在表 1 中,则整个数据将来自表 1 如果员工只出现在表 2 中,那么整个数据将来自表 2

这些表每个都有大约 40 行缺少数据。接近 5GB。 在 Java 中执行此操作的最佳方法是什么?我担心的是,如果我将这 2 个表中的数据提取到 Java 缓存中,我仍然需要循环考虑整个表 2 以查看那里是否还有员工。 还是python脚本会更好?

表 1

EmployeeID FirstName LastName PhoneNumber
EM01 Jhon Doe 12345
EM02 Dave Joe 34567

表 2:

EmployeeID FirstName LastName PhoneNumber
EM01 Jhon Doe 89000
EM03 Gabe Mai 45678

表3(合并电话号码后):

EmployeeID FirstName LastName PhoneNumber
EM01 Jhon Doe 12345,89000
EM02 Dave Joe 34567
EM03 Gabe Mai 45678

【问题讨论】:

【参考方案1】:

您可以通过 SQL 查询轻松完成此操作。

基本上,您需要full join,但是——唉——mysql 不支持。

所以,一种方法是:

select t1.EmployeeID, t1.FirstName, t1.LastName
       concat_ws(',', t1.PhoneNumber, t2.PhoneNumber) as PhoneNumber
from table1 t1 left join
     table2 t2
     on t1.EmployeeID = t2.EmployeeID
union all
select t2.EmployeeID, t2.FirstName, t2.LastName, t2.PhoneNumber
from table2 t2
     table1 t1 left join
     on t1.EmployeeID = t1.EmployeeID
where t1.EmployeeID is null;

即获取table1 中员工的所有行。然后添加来自table2 的附加行。第一部分concat_ws()方便组合电话号码。

【讨论】:

谢谢戈登。但就我而言,这些表位于不同的数据源中。第一个在 SQL Server 中,第二个在 Oracle 云服务器中。 @codeguru 创建从一个 DBserver 到另一个 DBserver 的链接服务器(例如,从 SQL Server 到 OracleDB),然后像两个表在同一台服务器上一样进行查询。 @codeguru 。 . .秋名是对的。这是文档:docs.microsoft.com/en-us/sql/relational-databases/…。或者,导出 Oracle 表并在 SQL Server 中重新导入 - 假设这是一次性(或不经常)操作。

以上是关于Java - 合并来自不同数据源中的 2 个表的数据的主要内容,如果未能解决你的问题,请参考以下文章

excel表怎么把2个表相同的表头不同的内容合并在一起?

来自 2 个表的数据未显示在同一页面上

Rails 3 - 处理来自几个表的数据

如何合并 2 个表的结果

如果我想对来自 2 个表的乘以 2 个值的项目求和,如何在 oracle 中创建过程

如何创建一个脚本来合并另一个表中的几个表?