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

3 Tables, 2 Databases, 1 Server... How to Join? (SQL/Informix)

我需要制定一个查询来执行以下操作: 1)在同一台服务器上加入两个(informix)SQL table(已经done/working) 2) 在同一台服务器上加入第三个 SQL table,但在不同的数据库中。

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

在同一个数据库上加入两个 table 没有问题。

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

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

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

databaseB.tableC.columnSHARED

我如何would/can加入databaseB.tableCdatabaseA.tableAdatabaseA.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}

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

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…])

table 名称的完整表示法是:

[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…])

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

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