And*_*der 5 sql database informix join isql
我需要制定一个查询来执行以下操作:1) 在同一台服务器上加入两个 (informix) SQL 表(已经完成/工作) 2)在同一台服务器上加入第三个 SQL 表,但在不同的数据库中。
对于我的示例代码,让我们在 databaseA 上使用 tableA 和 tableB,在 databaseB 上使用 tableC。
连接同一个数据库上的两个表是没有问题的。
SELECT tableA.columnA
tableB.columnA
FROM
tableA
JOIN
tableB
ON
tableB.columnSHARED = tableA.columnSHARED
WHERE
([where clauses are inconsequential for this])
Run Code Online (Sandbox Code Playgroud)
现在,我似乎无法工作的是 databaseB 上 tableC 的第二个 JOIN 子句。我尝试使用数据库名称前缀为所有表/列引用添加前缀,但这似乎不起作用。
澄清一下,两个数据库都在同一台服务器上,运行这些命令的用户可以访问这两个数据库。我会提供一条错误消息,但除了在字符位置 Y(第三个连接子句)附近的行 X 上存在错误这一事实之外,从 Informix 返回并没有任何有用的信息。还有一个通用链接:
databaseB.tableC.columnSHARED
Run Code Online (Sandbox Code Playgroud)
将如何/我可以加入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}
Run Code Online (Sandbox Code Playgroud)
假设当前数据库是保存两个表的数据库,那么您可以编写:
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…])
Run Code Online (Sandbox Code Playgroud)
表名的完整表示法是:
[database[@server]:][owner.]tablename
Run Code Online (Sandbox Code Playgroud)
因此,您还可以编写:
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…])
Run Code Online (Sandbox Code Playgroud)
无论哪个数据库是当前数据库,这都可以在当前服务器中正常工作。
此答案假定数据库具有相同的日志记录模式。如果他们不这样做,则无法进行数据库间联接。
归档时间: |
|
查看次数: |
1968 次 |
最近记录: |