3个表,2个数据库,1个服务器。。。如何加入?(SQL/Informix)
我需要制定一个查询来执行以下操作: 1) 在同一台服务器上连接两个(informix)SQL表(已完成/正在工作) 2) 在同一台服务器上,但在不同的数据库中加入第三个SQL表 对于我的示例代码,让我们在databaseA上使用tableA和tableB,在databaseB上使用tableC 连接同一数据库上的两个表没有问题3个表,2个数据库,1个服务器。。。如何加入?(SQL/Informix),sql,database,join,informix,isql,Sql,Database,Join,Informix,Isql,我需要制定一个查询来执行以下操作: 1) 在同一台服务器上连接两个(informix)SQL表(已完成/正在工作) 2) 在同一台服务器上,但在不同的数据库中加入第三个SQL表 对于我的示例代码,让我们在databaseA上使用tableA和tableB,在databaseB上使用tableC 连接同一数据库上的两个表没有问题 SELECT tableA.columnA tableB.columnA FROM tableA JOIN tableB ON
SELECT tableA.columnA
tableB.columnA
FROM
tableA
JOIN
tableB
ON
tableB.columnSHARED = tableA.columnSHARED
WHERE
([where clauses are inconsequential for this])
现在,我似乎无法工作的是databaseB上tableC的第二个JOIN子句。我已经尝试用数据库名称前缀作为所有表/列引用的前缀,但这似乎不起作用
只是澄清一下,两个数据库都在同一台服务器上,运行这些命令的用户可以访问这两个数据库。我会提供一条错误消息,但是除了在字符位置Y(第三个join子句)附近的第X行上有一个错误之外,从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}
假设当前数据库包含这两个表,则可以编写:
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…])
这将在当前服务器中正常工作,无论哪个数据库是当前数据库
此答案假设数据库具有相同的日志记录模式。如果他们不这样做,您就不能进行跨数据库连接。谢谢!第三个表上数据库和表名之间的
:
是我缺少的。虽然我能够让查询正常运行,但我必须使用左连接。然而,我看到来自第三级表的数据实际上并没有返回到结果集中。此外,当我尝试完全外部连接时,该命令似乎永远不会执行,因为它应该提供所有信息。请稍等,我将发布一个更新的净化查询。您必须使用JOIN指定LEFT或RIGHT(或FULL?),也可以选择在两者之间使用OUTER。如果TableC中没有与公共列名上TableA中的数据匹配的数据,LOJ将生成一个空列,(内部)JOIN将不生成任何内容。这意味着,即使您认为这两个数据库之间存在匹配,服务器也不会。您能否在三个表中显示数据的净化/简化形式?每个表中可能有5行,其中包含join列和另一个数据列,并在示例中显示针对这三个表运行的查询,输出呢?我已经在原始帖子的底部添加了一个更新的净化查询。您没有从第三个表中选择任何列-这合理吗?若有,何处条款的内容开始起作用;你在WHERE子句中过滤什么?假设,如果您没有从WHERE子句中选择任何内容,那么WHERE子句中会引用TableC;否则,为什么还要麻烦使用LOJ呢?你是对的,我忘记了在我的查询中从第三个数据库中进行选择。这就解决了!非常感谢你!