2012-03-02 59 views
1

我正在使用Access 2003並進行表查詢。錯誤3296:MS Access查詢中不支持的連接表達式與多個JOIN

這個想法是,我有多個表包含資金列表上的各種信息,我試圖將它們結合起來。所有的表格都有FundID作爲其中一個領域,這是我們用來識別每個基金的領域。有一個表格,不時更新字段MER。所以我們必須在適用期間應用MER值。這是我的SQL代碼:

SELECT 
[Fund Mapping].FundID, 
[Fund Mapping].FundName, 
[MarketValues].DateLookup, 
[MarketValues].[SumOfCurrentAmt]/100 AS [MV By Fund], 
[Fund Prices @ Month End].Price, 

IIf([MarketValues].DateLookup<"200908",[MER (08 to Jul 09)].MER, 
    IIf([MarketValues].DateLookup<"200911",[MER (Aug 09 to Oct 09)].MER, 
    IIf([MarketValues].DateLookup<"201008",[MER (Nov 09 to Jul 10)].MER, 
     IIf([MarketValues].DateLookup<"201106",[MER (Aug 10 to May 11)].MER,[MER (Jun 11 to present)].MER) 
    ) 
) 
) AS MER 

INTO [Fund Data] 
FROM [Fund Mapping], 

[MER (08 to Jul 09)] RIGHT JOIN 
    ([MER (Aug 09 to Oct 09)] RIGHT JOIN 
    ([MER (Nov 09 to Jul 10)] RIGHT JOIN 
     ([MER (Aug 10 to May 11)] RIGHT JOIN 
     ([MER (Jun 11 to present)] RIGHT JOIN 
      ([MarketValues] INNER JOIN [Fund Prices @ Month End] 
      ON ([MarketValues].DateLookup = [Fund Prices @ Month End].DateLookup) 
      AND ([MarketValues].FundID = [Fund Prices @ Month End].[Fund ID])) 
     ON [MER (Jun 11 to present)].FundID = [MarketValues].FundID) 
     ON [MER (Aug 10 to May 11)].FundID = [MarketValues].FundID) 
    ON [MER (Nov 09 to Jul 10)].FundID = [MarketValues].FundID) 
    ON [MER (Aug 09 to Oct 09)].FundID = [MarketValues].FundID) 
ON [MER (08 to Jul 09)].FundID = [MarketValues].FundID 

GROUP BY 
[Fund Mapping].FundID, 
[Fund Mapping].FundName, 
[MarketValues ].DateLookup, 
[SumOfCurrentAmt]/100, 
[Fund Prices @ Month End].Price, 

IIf([MarketValues].DateLookup<"200908",[MER (08 to Jul 09)].MER, 
    IIf([MarketValues].DateLookup<"200911",[MER (Aug 09 to Oct 09)].MER, 
    IIf([MarketValues].DateLookup<"201008",[MER (Nov 09 to Jul 10)].MER, 
     IIf([MarketValues].DateLookup<"201106",[MER (Aug 10 to May 11)].MER,[MER (Jun 11 to present)].MER) 
    ) 
) 
) 

ORDER BY 
[Fund Mapping].FundID, 
[MarketValues].DateLookup; 

DateLookup是格式爲YYYYMM的字符串。我之所以使用RIGHT JOIN而不是INNER JOIN,是因爲可以添加新的基金,所以早期的MER表格不會包含所有的FundID。 「MarketValues INNER JOIN基金價格@月底」表應該是整個事情的基礎 - 它擁有所有的資金,沒有任何東西應該從這裏掉下來。

當我試圖保存查詢時,它給了我一個錯誤消息,說不支持JOIN表達式。我不知道什麼是錯,或者我可以如何解決它。

請幫忙嗎?提前致謝!

========== UPDATE#1

我手動添加各聯接屬性和從頭設計視圖整個查詢的。它給了我幾乎相同的代碼,但允許我保存(上面的代碼給我一個錯誤,只要我試圖保存)。

但是,當我試圖運行查詢時,它給了我一個錯誤消息,說:「SQL語句無法執行,因爲它包含模糊的外部聯接。要強制其中一個聯接首先執行,創建一個單獨的查詢執行第一次連接,然後將該查詢包含在SQL語句中。「

難道沒有其他解決辦法嗎?

==========更新#2

於是我進一步挖了一下,並能夠解決問題,並有適當的運行查詢。

原來我所要做的就是加入[Fund Mapping]表格以及所有其他表格!也就是說,我所選擇的所有桌子都連接在一起。

只是想我應該給一個更新,以防其他人遇到同樣的問題。

謝謝你的幫助!

+0

這是一個令人恐懼的SQL,我會在這種情況下嘗試編寫VBA過程。 – 2012-03-02 19:38:48

+0

感謝您的建議,馬特,但我能夠解決它,而無需通過VBA麻煩!好極了!:) – Emily 2012-03-02 20:02:08

回答

0

有關此問題的解決方案,請參閱更新#2。

2

我認爲問題是混合'舊風格'交叉連接與中綴連接風格,例如考慮這個簡化的例子,其產生相同的錯誤:

SELECT * 
FROM T1, T2 RIGHT JOIN T3 ON T2.c = T3.c; 

一個簡單的解決上述是到另一個範圍執行RIGHT JOIN例如在派生中:

SELECT * 
    FROM T1, (
      SELECT T2.*, T3.c2 
       FROM T2 RIGHT JOIN T3 ON T2.c = T3.c 
      ) AS DT1; 
+0

我最終發現了一個簡單的解決方案(請參閱原始文章中的更新#2),但非常感謝您的替代方法! :) – Emily 2012-03-02 19:59:47

相關問題