我可以在Access 2010 SQL中混合LEFT JOINS和INNER JOINS吗?

时间:2014-02-05 15:35:11

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

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没有,我想返回null结果而不是没有结果,反之亦然。

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

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

有没有什么方法可以让我的组合查询按照我原先预期的方式工作(即使用INNER JOINS生成Q1,Q2和Q3以获得速度,然后让Q4在LEFT JOIN时将它们视为平面数据) ?

我可以使用一些VBA将每个查询删除到一个临时表中,并让Q4查看这些查询,但我希望在SQL中完成所有操作。可以这样做吗?

1 个答案:

答案 0 :(得分: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。就这么简单。