访问 - 匹配列范围/复杂连接

时间:2013-04-02 13:48:25

标签: sql ms-access access-vba

我们如何根据接近值的条件匹配列。 这需要复杂查询/范围比较/多个连接条件。 获取查询大小超过2GB错误。

表格:

InvDetails1 / InvDetails2 / INVDL / ExpectedResult

字段关系:

InvDetails1.F1 = InDetails2.F3

InvDetails2.F5 = INVDL.F1

INVDL.DLID = ExpectedResult.DLID

ExpectedResult.Total - 1 <  InvDetails1.F6 < ExpectedResult.Total + 1

left(InvDetails1.F21,10) = '2013-03-07'

返回结果,其中ExpectedResult的记录数仅为1。

Group by InvDetails1.F1 , count(ExpectedResult.DLID) works.

从这个结果。

最终结果:

InvDetails1.F1 , InvDetails1.F16 , ExpectedResult.DLID , ExpectedResult.NMR

ExpectedResult - has millions of rows.
InvDetails - few hundred thousands

1 个答案:

答案 0 :(得分:2)

如果我遇到这种情况并且发现我的查询在2GB处“撞墙”,那么我尝试的一件事就是创建一个单独保存的选择查询以隔离InvDetails1记录仅针对具体日期。然后,当加入其他表时,我会使用该查询而不是完整的InvDetails1表。

我的理由是查询优化器可能无法使用您的left(InvDetails1.F21,10) = '2013-03-07'条件在执行计划的早期排除InvDetails1记录,这可能导致查询增长得比实际需要的大得多(内部,正在处理中)。通过将日期选择放在单独的(先决条件)查询中来强制将日期选择放到流程的开头,可以将“主”查询的大小保持在更可行的大小。

另外,如果我发现自己的问题变得那么大,我也会密切注意我的.accdb(或.mdb)文件的大小,以确保 it 不会太接近2GB。我自己从来没有遇到过这种情况,但我听说数据库文件达到了2GB的障碍可能会导致一些令人讨厌的错误并且对于恢复来说相当“具有挑战性”。