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

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

  1. 如果表 1 和表 2 中都存在员工数据,则 phoneNumber 数据将合并为逗号分隔值,其他数据将来自表 1
  2. 如果员工仅出现在表 1 中,则整个数据将来自表 1
  3. 如果员工只出现在表 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

【问题讨论】:

    标签: java python mysql sql caching


    【解决方案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 中重新导入 - 假设这是一次性(或不经常)操作。
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多