如何将多个数据库中的数据合并为一个结果集.(新旧系统)


How to combine data from multiple databases into one result-set. (new and old system)

我有一个包含客户数据的新旧数据库。现在,在我的应用程序中搜索之前,我必须记住我要寻找的客户是新系统的一部分,还是旧系统的一员。这有点麻烦
我想将这两个结果集连接在一起,并将它们放入我的应用程序中的一个大型概述中——这是一个具有搜索功能的表。

对此,最好的做法是什么?

新旧数据库结构(系统)都由多个连接在一起的表组成,以便获得所需的必要信息。他们并不完全平等
新系统被拆分为更多的表,并添加了一些新的表,以满足业务扩展服务时的需求。

但是返回给观看者的结果是相同的。

是否可以将保存数据库查询结果集的两个数组合并在一起?-然后对其进行while-循环或foreach-循环?

目前还不确定是怎么做到的,但如果这是一个解决方案,我会很感激有人帮助我朝着正确的方向前进。。

通常,您可以在数据库级别使用UNION甚至UNION ALL组合来自多个选择或表的结果。您只需要注意您的表/选择返回相同的列。

例如:

-- old table/database
select t.customername as name, t.street as street, t.city as city 
from old_data.customers t
where t.name like 'M%'
union 
- new table/database
select p.name as name, a.street as street, a.city as city
from new_data.person p
inner join new_data.address a on p.address_id = a.id
where p.name like 'M%'

对于UNION,单个SELECT语句中的表或列的名称无关紧要。重要的是有相同数量的列,并且它们具有兼容的类型。

实际的问题可能在于从多个数据库访问表。解决方案取决于您正在使用的DBMS以及新旧数据库的位置。

如果两个数据库都存储在同一台服务器上,就像您的情况一样,大多数DMBS(如MySQL)将适用于上面的查询(您可以像database.table中那样在表名前面加上数据库名称,这很好)。

如果两个数据库都没有存储在同一台服务器上,那么解决方案将取决于DBMS。例如,Oracle允许您指定数据库链接,您可以使用该链接跨多个服务器进行查询。或者,您可以使用物化视图缓存远程表。

对于MySQL,有不同的可能性,在这个问题中进行了讨论,例如

由于两个数据库都在同一台机器/服务上,我们说的是mysql,因此实际上您甚至可以编写2个查询并将它们联合起来。或者在指向任何你想要的数据库时使用任何巧妙的查询:

select id, name from db1.user UNION select id, name from db2.user;

如果db1.user的结构与db2.user的结构不同,这也会起作用。。。