【发布时间】:2013-06-18 13:39:31
【问题描述】:
与这个问题类似,但他们的查询问题从未完全解决:
#Error showing up in multiple LEFT JOIN statement Access query when value should be NULL
当我期望在执行左连接时看到 Null 时出现 #Error,而右连接的右侧没有相应的记录:
Chain CasesPerMonthPerStore MonthOfFirstOrder
Naturally 2.3 5/1/2011
Tom's Market #Error
Livingstons #Error
EverClear 3.1 7/1/2012
Bob's Market 2.66 5/1/2012
Andy's Exports #Error
Jamestowns 0.89 7/1/2012
如果我将数据复制到表中并左连接到该表,它工作正常,所以我认为查询的语法有问题:
SELECT
MonthRange.Chain,
MonthRange.CasesShipped/IIf(MonthsSinceFirstOrder.Months>DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1,
DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1,
MonthsSinceFirstOrder.Months)/NumStores.NumberOfStores AS CasesPerMonthPerStore,
MonthsSinceFirstOrder.MonthOfFirstOrder
FROM
QueryDates,
(
MonthRange
INNER JOIN
NumStores
ON MonthRange.Chain=NumStores.Chain
)
INNER JOIN
MonthsSinceFirstOrder
ON MonthRange.Chain=MonthsSinceFirstOrder.Chain;
此 SQL 返回正确的结果,它只是在左连接时返回 #Errors 时的行为。
nb 中间奇怪的 Iif 语句检查自第一个订单以来的月数是否大于指定日期范围内包含的月数 - 所以如果日期范围有 6 个月并且第一个订单是结束日期前 9 个月,使用 6;如果第一个订单距离结束日期只有 4 个月,则使用 4。
-- 编辑更新--
好的,我将查询的元素一个一个取出,这是我能得到的最简单的,同时仍然重新创建左连接错误:
SELECT
MonthRange.Chain,
DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1 AS CasesPerMonthPerStore
FROM
QueryDates,
MonthRange;
这就是我加入它的方式:
SELECT
Chains.Chain,
ErrorQuery.CasesPerMonthPerStore
FROM
Chains
LEFT JOIN
ErrorQuery
ON Chains.Chain=ErrorQuery.Chain;
此 SQL 中是否有任何错误?
【问题讨论】:
-
我无法使用 [MonthRange]、[QueryDates] 和 [Chains] 都是表的最小情况重新创建问题。 那些中的任何一个在您的情况下是已保存的查询吗?
-
是的,有几个级别的嵌套查询可以做到这一点。我会检查这些查询,看看是否有任何问题。过去我遇到过一个问题,我对某个字段进行分组,然后从 Select 语句中删除了该字段,但意外地将其留在了 group by 子句中。 Access 没有意识到这一点,它在大多数情况下运行良好,但在某些情况下会引发奇怪的结果。如果我找到它的底部,我会在这里发布答案,感谢您抽出时间检查上面的查询。
标签: ms-access ms-access-2007 left-join