You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:02:48