异构数据库如何关联查询
例题描述和简单分析
MySQL中有数据表persons,如下:
Id_P |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
Oracle中有数据表orders,如下:
Id_O |
OrderNo |
Id_P |
1 |
77895 |
3 |
2 |
44678 |
3 |
3 |
22456 |
1 |
4 |
24562 |
1 |
5 |
34764 |
65 |
需要列出所有的人,以及他们的订单,与所有的订单和订购它们的人,结果如下:
LastName |
FirstName |
OrderNo |
Adams |
John |
22456 |
Adams |
John |
24562 |
Carter |
Thomas |
77895 |
Carter |
Thomas |
44678 |
Bush |
George |
|
34764 |
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=connect("mysql") |
2 |
=A1.query@x("select * from persons") |
3 |
=connect("oralce") |
4 |
=A3.query@x("select * from orders") |
5 |
=join@f(A2:persons,id_p;A4:orders,id_p).new(persons.lastname,persons.firstname,orders.orderno) |
简要说明:
A1 连接 MySQL 数据库
A2 获取 persons 表的数据
A3 连接 Oracle 数据库
A4 获取 orders 表的数据
A5 A2与 A4 的数据按 id_p 全连接,列出需要的数据,即结果
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
https://stackoverflow.com/questions/50597874/is-it-possible-to-write-cross-database-join-queries
英文版