我对MS Access给我的这条消息感到难过。
我正在尝试运行SELECT查询,其中包含两个子查询。所有表格都是本地的。
有人可以向我解释为什么下面的代码会返回此错误吗?
SELECT S.SKU, S.Date, S.[Order No], P.WSP, P.Average_Cost, S.[Item Status]
FROM [Item Detail Temp] AS S, [FD Worksheets Temp] AS P
WHERE [P].[SKU]=[S].[SKU] AND [P].[Date to use]=(SELECT MIN(P2.[Date to use])
FROM [FD Worksheets Temp] P2
WHERE P2.[SKU] = S.[SKU]
AND P2.[Date to use] >= S.[Date]);
给谷歌带来帮助并不是特别有帮助。我在安全性方面启用了宏以确保它不存在,并且据我所知,我在上面的代码中没有任何可能导致错误的分组?
此外,我相信代码确实可以正常工作,但是整个加载栏结束时该消息显示在屏幕的左下角。它的运行速度也非常慢,而且我确信我在过去运行此查询时没有显示该消息,并且比目前更快。
非常感谢
编辑:看了一下之后,我发现了一些可能的原因:
" - 它在SELECT子句中使用First(),Sum(),Max(),Count()等。聚合记录的查询是只读的。 - 有一个MIN()函数,可能导致它吗?
- 它在SELECT子句中有一个子查询。取消选中子查询下的“显示”框,或改为使用域聚合功能。"
- JOIN中的字段未正确编制索引:JOINed字段中没有主键或唯一索引。 没有唯一键字段,这可能是原因吗?
答案 0 :(得分:2)
JOIN
您的表格来源并使用域聚合函数DMin
来使您的查询更新。
FROM
[Item Detail Temp] AS S
INNER JOIN [FD Worksheets Temp] AS P
ON [P].[SKU]=[S].[SKU]
WHERE
[P].[Date to use]=
DMin
(
"[Date to use]",
"FD Worksheets Temp",
"[SKU] = " & S.[SKU] & " AND [Date to use] >= " & Format(S.[Date], "\#yyyy-m-d\#")
);
答案 1 :(得分:1)
汉斯,我注意到你删除了你的评论。我及时得到它,它完美无缺。现在,查询的运行时间不到一秒,而之前的查询时间为5-10分钟。
我使用以下方法管理:
SELECT S.SKU, S.Date, S.[Order No], P.WSP, P.Average_Cost, S.[Item Status]
FROM [Item Detail Temp] AS S, [FD Worksheets Temp] AS P
WHERE
[P].[SKU]=[S].[SKU]
AND [P].[Date to use]=
DMin
(
"[Date to use]",
"FD Worksheets Temp",
"[SKU] = " & S.[SKU] & " AND [Date to use] >= " & Format(S.[Date], "\#yyyy-m-d\#")
);
答案 2 :(得分:0)
您的查询包含聚合函数MIN
,表应该使用JOIN
子句连接,连接列也应该被编入索引,详细信息表应该使用具有唯一索引的列连接,通常它是' s主键。