2012-10-15 144 views
0

我有這個查詢在SQL服務器上正常工作,但不在Access中,我無法轉換它。我一直聽說JET缺少一些TSQL功能,我想複雜的聯接就是其中之一。無法將SQL查詢轉換爲Access

SELECT C.[Position], TT.[Description] as TrainingType, T.ProgramTitle, T.ProgramSubTitle, T.ProgramCode, ET.CompletedDate 
from HR_Curriculum C 
LEFT JOIN HR_Trainings T ON C.TrainingID = T.TrainingID 
LEFT JOIN HR_TrainingTypes TT ON T.TrainingTypeID = TT.TrainingTypeID 

LEFT JOIN HR_EmployeeTrainings ET ON C.TrainingID = ET.TrainingID 
           AND (ET.AvantiRecID IS NULL OR ET.AvantiRecID = '637') 
where (c.[Position] = 'Customer Service Representative' 
     OR C.[Position] = 'All Employees') 
order by [Position], Description, ProgramTitle 

我試圖把多餘的連接語句的WHERE子句中下跌,但由於某些原因,這不會產生記錄的正確計數。

回答

1

檢查您的表別名是否與'as'一起被刪除。訪問不像[tablename] [別名],而是嘗試[tablename]作爲[別名]。我知道複雜的左連接不應該是一個問題,但是如果Access返回一些連接錯誤,Access可能會阻塞別名工具。我也會嘗試查詢ET表上的限制,然後將它加入到更大的查詢中。我注意到,試圖對涉及左或右連接的記錄施加限制通常不會產生正確的記錄,因爲Access會在連接後限制集合。

+0

而我也越來越'JOIN表達不所以我想也許我不能在連接中做任何過濾。 – MAW74656

+1

您應該可以進行過濾,但是您必須小心,因爲Access會在加入之後應用過濾器,這可能會或可能不是您想要的。只是爲了安全起見,我會爲已過濾的信息創建查詢,並在需要時加入這些查詢。 – KFleschner

2

當你有一個以上的JOINms-access需要用括號來包裝他們是這樣的:

SELECT C.[Position], TT.[Description] as TrainingType, T.ProgramTitle, T.ProgramSubTitle, T.ProgramCode, ET.CompletedDate 
from (((HR_Curriculum C 
LEFT JOIN HR_Trainings T ON C.TrainingID = T.TrainingID) 
LEFT JOIN HR_TrainingTypes TT ON T.TrainingTypeID = TT.TrainingTypeID) 

LEFT JOIN HR_EmployeeTrainings ET ON C.TrainingID = ET.TrainingID 
           AND (ET.AvantiRecID IS NULL OR ET.AvantiRecID = '637')) 
where (c.[Position] = 'Customer Service Representative' 
     OR C.[Position] = 'All Employees') 
order by [Position], Description, ProgramTitle 

,或者你將有Missing Operator錯誤

+0

獲取'JOIN表達式不支持',所以我認爲你是正確的關於parens,但也許我不能過濾連接。 – MAW74656