MS Access嵌套连接错误

时间:2013-04-03 17:29:14

标签: ms-access ms-access-2013

我正在使用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]

关于我做错了什么建议?

2 个答案:

答案 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 basicsSurviving Subqueries