如何使用内部/外部组合在 Access 中加入 4 个以上的表?

Posted

技术标签:

【中文标题】如何使用内部/外部组合在 Access 中加入 4 个以上的表?【英文标题】:How do I join 4+ tables in Access with a combination inner/outer? 【发布时间】:2009-08-01 20:59:43 【问题描述】:

我还没有找到在 MSAccess 中使用外连接来连接 4 个或更多表的方法。它适用于 SQL Server,但不适用于 Access。我不相信这是可能的。我有 A、B、C、D 和 E 表。我需要像这样加入这些表:

左外连接 B 左外连接 C 内连接 D B 内连接 E

当您在 FROM 子句中使用 LEFT/RIGHT/INNER JOINS 时,Access 不允许您在 where 子句中使用常规连接。如果这样做,我会收到非常非常模糊的错误,例如“不支持 JOIN 表达式”或“查询表达式中的语法错误(缺少运算符)”。我也许可以使用直通查询,但我还不知道该怎么做。我可以加入的最多的表是 3 个这样的外部连接:

FROM(A 在 A.b = B.b 上左连接 B) 在 A.c = C.c 上左连接 C

不要说任何关于“外部”关键字的内容也不允许,因为虽然它不在文档中,但它确实接受它。

【问题讨论】:

我希望您认为编辑可以接受。这似乎消除了争论的部分,这可能会导致你投下更多的反对票 也许吧。我已经彻底研究过了,论坛上的大多数回复都试图提供无用或不正确的答案。 【参考方案1】:

在 Access 中,您一次只能加入两个结果。要加入更多表格,您需要更多括号:

from
   (
      (
         (
            A inner join D on D.id = A.id
         )
         left join B on B.id = A.id
      )
      inner join E on E.id = B.id
   )
   left join C on C.id = A.id

【讨论】:

不幸的是,Access 文档明确指出它不允许在 OUTER 连接中进行 INNER 连接...我已经尝试过了,但它给出了模糊的错误“不支持连接表达式”。跨度> "LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 中,但 INNER JOIN 不能嵌套在 LEFT JOIN 或 RIGHT JOIN 中。" office.microsoft.com/client/… 可以在 B 和 E 之间使用左连接,并在 where 子句中添加条件以仅包含 E 表中存在任何数据的行。这样就剩下一个内部连接了。【参考方案2】:

解决此问题的常见方法是使用已保存的查询来连接您的第一对表,并使用从那里开始的连续查询向上构建。这很混乱,尽管对未来需要哪些数据访问路径进行一些预先考虑可以帮助保持合理的逻辑。

【讨论】:

Access/Jet 没有“视图”。它确实保存了查询,这很像“视图”,但我不认为使用其他数据库中的术语来讨论 Access。 在功能上它们与视图相同,但从技术上讲你是正确的,我已经修改了答案以使用正确的术语 @David W. Fenton:“Access/Jet 没有视图”——如果这是真的,那么为什么它有 CREATE VIEW 语法 (office.microsoft.com/en-us/access/HP010322231033.aspx) 信息架构有一个 VIEWs 行集Jet 3.51 和更早版本的 Jet 和 ACE 的 OLE DB 提供程序支持。仅使用 ANSI-89 查询模式(例如 DAO)的问题是您看不到一些更“最近”的功能(即“最近”的意思是“在过去十年中”!!) 哇,这看起来很混乱,很糟糕,而且很邪恶,这可能只是解决方案。我正在使用 Visual Basic/Application Basic,所以我想知道它是否可以正常工作。我希望它实际上比循环内的多个查询更快。我会试试的,谢谢……我想! 哦,这确实很可怕,尽管它是文档推荐的解决问题的方法(或者是我上次查看的方法) - 它之所以有效,是因为 David Fenton 指出 Access 中保存的查询不是与真实 dbms 中的视图完全相同。如果您花时间制定一个合乎逻辑的方法和命名约定,其中一个可能还不错的领域 - 否则就是下降到意大利面

以上是关于如何使用内部/外部组合在 Access 中加入 4 个以上的表?的主要内容,如果未能解决你的问题,请参考以下文章

通过 vba/sql 在 Access 中加入多个表

如何在Python 中导入access 数据

如何在 Easytrieve 内部 SORT 中加入记录?

在 C# Access 数据库中加入 2 个表

从单独的数据库中加入查询

在 MS ACCESS 中加入两个不同的计数查询