我正在使用 AS400 版本 7.1。
具备以下条件:
服务器A (SA) - 数据库A (DBA) - 表A (TA)
服务器B (SB) - 数据库B (DBB) - 表B (TB)
SELECT A.*, B.*
FROM SA.DBA.TA A INNER JOIN SB.DBB.TB
ON A.PN=B.PN
WHERE A.PN='BFDKS';
在 AS400 中连接来自两个不同服务器的 2 个表的正确语法是什么?
我收到以下错误
关系数据库SA不在关系数据库目录中
我很确定目前 Db2 for i 不可能实现这一点...
由三部分组成的名称对于 i 来说是新的,据我所知仅限于
插入 mylib.mytable (从remotedb.somelib.sometable中选择*);
参见 使用远程子选择创建表
或者在触发程序中.. 请参阅触发器中的由三部分组成的名称
Db2 for LUW 具有这样的联合功能...
我见过的一个解决方法是使用用户定义的表函数 (UDTF) 从远程 Db2 for i 数据库返回行..
在 DB2 for i 上不可能。但就像查尔斯说的,你可以做到:
-- run this instructions on server B
create table qtemp.SADBATA as (
SELECT A.* FROM SA.DBA.TA A
where A.PN='BFDKS'
) with data;
SELECT * FROM qtemp.SADBATA A INNER JOIN SB.DBB.TB ON A.PN=B.PN;
您可以创建一个表函数,在单个 SQL 语句中命中服务器 B 并将行返回到服务器 A。这有多种口味;有或没有参数(键)。
CREATE OR REPLACE FUNCTION
remote_inventory()
RETURNS TABLE (
UPC CHAR(64),
QUANTITY INT)
LANGUAGE SQL
no external action
reads sql data
fenced
cardinality 1
BEGIN
return select UPC,quantity
from systemB.locallib.inventory;
end
Select a.upc,a.quantity,b.quantity
from locallib.inventory a, table(remote_inventory()) b
where a.upc = b.upc