【问题标题】:Can I mix LEFT JOINS and INNER JOINS in Access 2010 SQL?我可以在 Access 2010 SQL 中混合 LEFT JOINS 和 INNER JOINS 吗?
【发布时间】:2014-02-05 15:35:11
【问题描述】:

TL;DR:我想知道是否可以在 Access 中混合使用 LEFT 和 INNER 联接,因为 LEFT 联接 (as is to be expected) 会显着降低我的查询速度。

完整版: 昨天,我是having an issue,原来是由于 Access 2010 不喜欢我在组合查询中混合 LEFT 和 INNER JOIN 造成的。在这里简单回顾一下:

我有三个查询,我希望将它们合并。每个组成查询都是使用多个表和 INNER JOIN 构建的。

然后我需要结合这三个查询。 Q1 包含比 Q2 和 Q3 更多的结果,并且在 Q2 和/或 Q3 中没有匹配项的情况下,我仍然想返回 Q1 的结果。同样,当 Q2 返回 Q3 没有的结果时,我想返回空结果而不是没有结果,反之亦然。

所有这些都需要使用 LEFT JOIN 连接 Q1、Q2 和 Q3 的第四个查询;但这会导致“无法绑定多部分标识符”错误。这是通过用 LEFT JOINS 替换组成查询中的所有 INNER JOIN 来解决的。从本质上讲,我假设 Q4 只会查看其他查询的结果,而实际上它是一次性完成的,因此出现了错误。

所以,我已经解决了实际错误,但我现在正在运行四个查询,全部使用 LEFT JOIN。尽管这在每个组成查询中返回相同的结果,但由于外部联接的工作方式,它的速度要慢得多。

有什么方法可以让我的组合查询按我最初的预期工作(即使用 INNER JOINS 生成 Q1、Q2 和 Q3 以提高速度,然后在 LEFT JOINing 时让 Q4 将它们视为平面数据) ?

我可以使用一些 VBA 将每个查询放到一个临时表中并让 Q4 查看这些查询,但我希望全部在 SQL 中完成。这个可以吗?

【问题讨论】:

  • 请提供架构、示例数据和所需的输出。
  • 嗨@RedFilter - 请原谅我的无知,但架构不只与SQL Server相关吗?我正在使用 MS Access 2010。我可能误解了这个词。
  • 我认为架构@RedFilter 表示表结构
  • 可能不会,但您可以使用子查询等。 SELECT ... FROM (SELECT INNER q1, q2 etc) LEFT Q3
  • @DStanley 谢谢。实际的表结构和查询是否相关?我很高兴将它们包括在内,但我怀疑它们会混淆本质上是一个理论问题;除非实际的表结构和/或查询布局会影响我是否可以混合 INNER 和 LEFT 联接,但我认为情况并非如此?

标签: sql ms-access join ms-access-2010


【解决方案1】:

标题问题的答案是:是的,你可以混合外连接和内连接:

SELECT
  A.X,
  B.Y,
  C.Z
FROM
  A RIGHT JOIN (
    B INNER JOIN (
      C LEFT JOIN (
        D
      ) ON C.DID = D.ID
    ) ON B.CID = C.ID
  ) ON A.BID = B.ID

对正文问题的回答是:不,您不能对表进行内连接,而外连接则结果就好像内连接会被计算为左连接一样。一旦执行连接,它的结果就会被锁定并且类似于一组全新的数据。

如果您想要从 Q1 到 Q4 的空匹配,那么您必须外连接 Q1 到 Q4。就这么简单。

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 2022-09-28
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多