【发布时间】: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