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 个表的数据的主要内容,如果未能解决你的问题,请参考以下文章