3个表,2个数据库,1个服务器...如何加入? (SQL/Informix)

问题描述 投票:0回答:2

我需要制定一个查询来执行以下操作: 1)连接同一服务器上的两个(informix)SQL表(已经完成/工作) 2) 连接同一服务器上不同数据库中的第三个 SQL 表。

对于我的示例代码,我们在数据库 A 上使用 tableA 和 tableB,在数据库 B 上使用 tableC。

连接同一个数据库上的两个表是没有问题的。

SELECT tableA.columnA
       tableB.columnA
FROM
       tableA
JOIN
       tableB
ON
       tableB.columnSHARED = tableA.columnSHARED
WHERE
       ([where clauses are inconsequential for this])

现在,我似乎无法工作的是数据库 B 上的表 C 的第二个 JOIN 子句。我尝试过使用数据库名称前缀为所有表/列引用添加前缀,但这似乎不起作用。

澄清一下,两个数据库位于同一服务器上,运行这些命令的用户可以访问这两个数据库。我会提供一条错误消息,但是除了 X 行靠近字符位置 Y(第三个连接子句)处存在错误这一事实之外,Informix 并没有返回任何有用的信息。还有一个常见的链接:

databaseB.tableC.columnSHARED

我如何/可以将

databaseB.tableC
加入
databaseA.tableA
databaseA.tableB


编辑2:响应者的新净化查询:

SELECT FIRST 100 
    tableA.sharedColumn, 
    tableA.colA, 
    tableA.colB, 
    tableA.colC, 
    tableA.colD, 
    tableA.colE, 
    tableA.colF, 
    tableA.colG, 
    tableB.colA ,
    databaseB:tableC.column
FROM 
    tableA 
JOIN 
    tableB 
ON 
    tableB.sharedColumn = tableA.sharedColumn 
LEFT OUTER JOIN 
    databaseB:tableC 
ON 
    databaseB:tableC.sharedColumn = databaseA:tableA.sharedColumn 
WHERE 
    {where clauses}
sql database join informix isql
2个回答
5
投票

假设当前数据库是保存这两个表的数据库,那么你可以这样写:

SELECT A.ColumnA,
       B.ColumnB,
       C.ColumnC
  FROM tableA AS A
  JOIN tableB AS B ON B.columnSHARED = A.columnSHARED
  JOIN databaseB:tableC AS C ON C.columnSHARED = A.ColumnSHARED
 WHERE ([…where clauses are inconsequential for this…])

表名的完整表示法是:

[database[@server]:][owner.]tablename

因此,你也可以写:

SELECT A.ColumnA,
       B.ColumnB,
       C.ColumnC
  FROM databaseA:tableA AS A
  JOIN databaseB:tableB AS B ON B.columnSHARED = A.columnSHARED
  JOIN databaseB:tableC AS C ON C.columnSHARED = A.ColumnSHARED
 WHERE ([…where clauses are inconsequential for this…])

无论当前数据库是哪个数据库,这都可以在当前服务器中正常工作。

这个答案假设数据库具有相同的日志记录模式。如果不这样做,您将无法进行数据库间连接。


-1
投票

我想知道是否可以创建一个连接两个数据库的查询,两个数据库都是informix,一个有日志,另一个没有......

© www.soinside.com 2019 - 2024. All rights reserved.