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.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}
假设当前数据库是保存两个 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…])
无论哪个数据库是当前数据库,这在当前服务器中都能正常工作。
此答案假定数据库具有相同的日志记录模式。如果他们不这样做,您将无法进行数据库间连接。
我需要制定一个查询来执行以下操作: 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.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}
假设当前数据库是保存两个 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…])
无论哪个数据库是当前数据库,这在当前服务器中都能正常工作。
此答案假定数据库具有相同的日志记录模式。如果他们不这样做,您将无法进行数据库间连接。