2013-04-03 60 views
1

我正在使用Access 2013,並且遇到了嵌套連接的一些問題。我擔心我不擅長嵌套連接,因此Access給我的「Error in JOIN syntax」錯誤消息並沒有多大幫助。MS Access嵌套連接錯誤

我有兩個表:

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

有可能是對每個農場進入多個RAMP項目,我想只包括每個農場入口最近的到期日期或null如果沒有條目。我嘗試使用下面的查詢,但訪問是給我的一個錯誤,指出存在錯誤在我的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

它可能反對該條款,因爲你是用過期時間不RAMP加入 「農場[FarmId] =減速[FarmId]。」 。無論如何,爲了實現你想要的,我認爲你需要使用一組:

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

它在我看來像你是一個相關的子查詢。所以,我提供了下面的查詢。但是,相關的子查詢可能會很慢。我認爲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; 

艾倫·布朗有子查詢有用的提示:Subquery basicsSurviving Subqueries