1

我正在使用 Access 2013,并且在嵌套连接方面遇到了一些问题。恐怕我对嵌套连接不是很精通,所以 Access 给我的“JOIN 语法错误”错误消息并没有多大帮助。

我有两张桌子:

Farms           RAMP
--------        --------
FarmID          RAMPID
Farm Name       FarmID
                Date Expires

每个农场条目可能有多个 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]

关于我做错了什么的任何建议?

4

2 回答 2

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]
于 2013-04-03T17:44:30.843 回答
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 对子查询有有用的提示:子查询基础知识幸存的子查询

于 2013-04-03T17:41:22.487 回答