我正在使用Access 2013,并且遇到嵌套连接的一些问题。我担心我对嵌套连接不是很熟练,因此Access给我的“JOIN语法错误”错误消息没有多大帮助。
我有两张桌子:
Farms RAMP
-------- --------
FarmID RAMPID
Farm Name FarmID
Date Expires
每个Farm条目可能有多个RAMP条目,我希望仅包含每个场条目的最新到期日期,如果没有条目,则为null。我试图使用以下查询,但Access给出了一个错误,说我的JOIN语法中有错误:
SELECT Farms.FarmID, Farms.[Farm Name], [Expires]
FROM Farms
LEFT JOIN (SELECT TOP 1 RAMP.[Date Expires] FROM RAMP WHERE RAMP.[FarmID] = Farms.FarmID) AS Expires ON Farms.[FarmID] = RAMP.[FarmID]
关于我做错了什么建议?
答案 0 :(得分:2)
它可能反对“ON FARMS。[FarmId] = RAMP。[FarmId]”条款因为你加入Expires而不是RAMP。无论如何要实现你想要的,我认为你需要使用一个小组:
SELECT Farms.FarmID, Farms.[Farm Name], MAX(RAMP.[Expires]) AS Expires
FROM Farms
LEFT JOIN RAMP ON RAMP.[FarmID] = Farms.FarmID
GROUP BY Farms.FarmID, Farms.[Farm Name]
答案 1 :(得分:1)
在我看来,你的目标是相关的子查询。所以,我提供了以下查询。但是相关的子查询可能很慢。我认为Young Bob提供了更好的方法。我会留下这个以防万一。
SELECT
Farms.FarmID,
Farms.[Farm Name],
(
SELECT TOP 1 RAMP.[Date Expires]
FROM RAMP
WHERE RAMP.[FarmID] = Farms.FarmID
) AS Expires
FROM Farms;
Allen Browne提供了有关子查询的有用提示:Subquery basics和Surviving Subqueries