2014-02-05 81 views
1

TL; DR:我想知道是否可以在Access中混合使用LEFT和INNER連接,因爲左連接(as is to be expected)顯着減慢了我的查詢速度。我可以在Access 2010 SQL中將LEFT JOINS和INNER JOINS混合使用嗎?

完整版:昨天,我having an issue,這原來是由Access 2010不喜歡我混合LEFT和INNER在聯合查詢連接造成的。稍微回顧一下:

我有三個查詢,我希望合併。每個組成查詢都是使用幾個表和INNER JOIN構建的。

然後我需要結合這三個查詢。 Q1比第二季度和第三季度的結果更多,並且在第二季度和/或第三季度沒有匹配的情況下,我仍然想要返回Q1的結果。同樣,Q2返回的結果Q3沒有,我想返回空結果而不是結果,反之亦然。

所有這些都需要使用LEFT JOIN連接Q1,Q2和Q3的第四個查詢;但是這造成了「多部分標識符不能被綁定」的錯誤。這是通過用LEFT JOINS替換組成查詢中的所有INNER JOIN來解決的。從本質上講,我認爲Q4只會考慮其他查詢的結果,而實際上它是一次性完成的,因此是錯誤。

所以,我解決了實際的錯誤,但我現在正在運行四個查詢,全部使用LEFT JOIN。即使這在每個組成查詢中都返回相同的結果,但由於外部聯接的工作原因,它要慢得多。

有沒有什麼方法可以讓我的組合查詢按照我原先預期的方式工作(即,使用INNER JOINS生成Q1,Q2和Q3以獲得速度,然後Q4將它們作爲平面數據在左連接時處理它們)?

我可以使用一些VBA將每個查詢放到一個臨時表中,讓Q4看看這些,但我希望能夠在SQL中完成所有操作。這可以做到嗎?

+0

請提供架構,示例數據和所需輸出。 – RedFilter

+0

嗨@RedFilter - 原諒我的無知,但是不是隻在SQL Server相關的模式?我正在使用MS Access 2010.我可能會誤解這個詞。 – BFWebAdmin

+2

我認爲架構@RedFilter意味着表結構 –

回答

1

答案標題問題是:是的,你可以混合使用內部和外部連接:

SELECT 
    A.X, 
    B.Y, 
    C.Z 
FROM 
    A RIGHT JOIN (
    B INNER JOIN (
     C LEFT JOIN (
     D 
    ) ON C.DID = D.ID 
    ) ON B.CID = C.ID 
) ON A.BID = B.ID 

答案的身體問題是:不,你不能內部聯接表和外加入該結果就好像內連接將被計算爲左連接一樣。一旦連接被執行,它的結果被鎖定並且類似於一組全新的數據。

如果要從Q1到Q4進行空匹配,則必須將外連接Q1直至Q4。就這麼簡單。