MS Access查询带最新版本变更的零件列表问题求助
Access查询零件最新版本的SQL修正方案
你的SQL语法错误核心是子查询未用括号包裹,Access要求WHERE子句中使用子查询时必须将整个子查询用括号括起来。另外,原写法在处理无版本记录的零件时会过滤掉这类数据,同时性能也可以优化,以下是几种可行的解决方案:
方案1:修正原SQL的语法问题(保留关联子查询)
先修复语法错误,同时调整条件以保留无版本的零件:
SELECT [CAD Parts].[Part Number], [CAD Parts].Description, [CAD Parts].[Date Created], Revisions.Revision, Revisions.[Revision Date] FROM [CAD Parts] LEFT JOIN Revisions ON [CAD Parts].[Part Number] = Revisions.[Part Number] WHERE (Revisions.[Revision Date] = (SELECT MAX([Revision Date]) FROM Revisions AS R1 WHERE R1.[Part Number] = [CAD Parts].[Part Number])) OR Revisions.[Part Number] IS NULL ORDER BY [CAD Parts].[Part Number];
- 注意:如果不需要保留无版本的零件,可以去掉
OR Revisions.[Part Number] IS NULL这部分条件。
方案2:更高效的分组关联写法(推荐)
先通过分组子查询一次性计算出每个零件的最新版本日期,再与原表关联,适合数据量较大的场景:
SELECT cp.[Part Number], cp.Description, cp.[Date Created], r.Revision, r.[Revision Date] FROM [CAD Parts] AS cp LEFT JOIN ( SELECT [Part Number], MAX([Revision Date]) AS LatestRevDate FROM Revisions GROUP BY [Part Number] ) AS latestRev ON cp.[Part Number] = latestRev.[Part Number] LEFT JOIN Revisions AS r ON latestRev.[Part Number] = r.[Part Number] AND latestRev.LatestRevDate = r.[Revision Date] ORDER BY cp.[Part Number];
这个写法的优势是减少了逐行执行子查询的开销,同时自动保留没有版本记录的零件,查询结果更符合需求。
内容的提问来源于stack exchange,提问作者mytjnamewastaken
相关产品推荐
相关产品推荐

