Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3个表,2个数据库,1个服务器。。。如何加入?(SQL/Informix)_Sql_Database_Join_Informix_Isql - Fatal编程技术网

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

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

我需要制定一个查询来执行以下操作: 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])
现在,我似乎无法工作的是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呢?你是对的,我忘记了在我的查询中从第三个数据库中进行选择。这就解决了!非常感谢你!