Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-合并来自不同数据源中2个表的数据_Java_Python_Mysql_Sql_Caching - Fatal编程技术网

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

Java-合并来自不同数据源中2个表的数据,java,python,mysql,sql,caching,Java,Python,Mysql,Sql,Caching,我有一个用例,在这个用例中,我必须合并来自两个表(它们位于不同的数据源中)的数据。 考虑每个表都有雇员数据(名字,姓氏,电话号码)。对于每个员工,我必须合并两个表中的电话号码数据,其他数据将保持与表1中相同 如果表1和表2中都有员工数据,则电话号码数据将合并为逗号分隔的值,其他数据将来自表1 如果员工仅出现在表1中,则整个数据将来源于表1 如果员工仅出现在表2中,则整个数据将来自表2中 这些表每个表大约缺少40行数据。接近5GB。 在Java中实现这一点的最佳方法是什么?我担心的是,如果我将这两

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

  • 如果表1和表2中都有员工数据,则电话号码数据将合并为逗号分隔的值,其他数据将来自表1
  • 如果员工仅出现在表1中,则整个数据将来源于表1
  • 如果员工仅出现在表2中,则整个数据将来自表2中
  • 这些表每个表大约缺少40行数据。接近5GB。 在Java中实现这一点的最佳方法是什么?我担心的是,如果我将这两个表中的数据拉入Java缓存,我仍然必须循环整个表2,以查看是否有员工也在那里。 或者python脚本会更好

    表1

    员工编号 名字 姓氏 电话号码 EM01 约翰 雌鹿 12345 EM02 戴夫 乔 34567
    您可以通过SQL查询轻松地完成此操作

    基本上,您需要一个
    完全连接
    ,但是——唉——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;
    

    也就是说,获取
    表1
    中员工的所有行。然后从
    表2中添加额外的行。对于第一部分,
    concat_ws()
    便于组合电话号码。

    谢谢Gordon。但在我的例子中,这些表位于不同的数据源中。第一个表在SQL Server中,第二个表在Oracle Cloud Server中。@codeguru创建从一个数据库服务器到另一个数据库服务器(例如,从SQL Server到OracleDB)的链接服务器,然后像两个表位于同一服务器上一样进行查询。@codeguru。阿金娜是对的。以下是文档:。或者,导出Oracle表并在SQL Server中重新导入它——假设这是一次性(或不经常)操作。