从其他数据库访问SQL连接

时间:2017-10-19 10:43:47

标签: sql ms-access join

我有3个访问数据库(.accdb文件):

  • db1.accdb有'表1'
  • db2.accdb有'表2'
  • db3.accdb为空

我应该在db3中编写一个查询,它与表1和表2进行连接并显示结果。

我已经尝试过类似的东西,但它不起作用......

( SELECT * FROM  [table 1]  IN 'C:\files\db1.accdb' ) t1
INNER JOIN 
( SELECT * FROM  [table 2]  IN 'C:\files\db2.accdb' ) t2
ON
t1.field1 = t2.field1 and t1.field2 = t2.field2

2 个答案:

答案 0 :(得分:2)

目前,您的查询会保留语法错误,因为顶级SELECT不应位于括号中。删除它们是不够的,因为IN子句会干扰FROM子句。

要使用一个SELECT并将每个外部数据库表视为本地表,只需在句点中限定外部数据库路径,类似于您在服务器级RDBMS中所做的操作(即MySQL,Postgres,SQL)服务器)在同一服务器上查询数据库时。是的,括号不应包含引号:

SELECT t1.*, t2.* 
FROM [C:\files\db1.accdb].[table 1] t1
INNER JOIN [C:\files\db2.accdb].[table 2] t2
  ON t1.field1 = t2.field1 AND t1.field2 = t2.field2

或者使用反引号:

SELECT t1.*, t2.* 
FROM `C:\files\db1.accdb`.`table 1` t1
INNER JOIN `C:\files\db2.accdb`.`table 2` t2
  ON t1.field1 = t2.field1 AND t1.field2 = t2.field2

答案 1 :(得分:1)

我希望查询看起来像这样:

select . . .
from ( SELECT * FROM [table 1] IN 'C:\files\db1.accdb' ) as t1 INNER JOIN
     ( SELECT * FROM [table 2] IN 'C:\files\db2.accdb' ) t2
     ON t1.field1 = t2.field1 and t1.field2 = t2.field2;

. . .适用于您希望从每个表中获取的列。