2012-01-07 82 views
1

我想在MS Access中創建一個查詢,最多可以查詢4個表以產生一個很好的信息整理。
在點擊查看我收到一個錯誤:Microsoft Access 2007 - 查詢多個表會產生錯誤

Syntax error (missing operator) in query expression sessions.sessionTypeFK=session_type.session_type.id) inner join staff on (sessions.StaffFK=staff.staff_id) inner join person on (staff.FK_personID=person.personID'

有趣的是它總是錯過了最後支架的錯誤?

SELECT sessions.*, session_type.[Session Type],forename,surname 
from sessions 
inner join session_type on (sessions.SessionTypeFK=session_type.session_type_id) 
inner join staff on (sessions.StaffFK=staff.Staff_ID) 
inner join person on (staff.FK_PersonID=person.PersonID) 

我知道,MS Access是模糊的,你必須包裝與()內連接才能正常工作,我與其他幾個疑問做到了這一點,但我真的努力得到該位解析。

回答

0

你的意思是:

SELECT sessions.*, session_type.[Session Type],forename,surname 
from ((sessions 
inner join session_type on sessions.SessionTypeFK=session_type.session_type_id) 
inner join staff on sessions.StaffFK=staff.Staff_ID) 
inner join person on staff.FK_PersonID=person.PersonID 

爲什麼不使用Access查詢設計窗口,然後切換到SQL視圖來獲取樣本SQL?

+0

非常感謝。如果微軟堅持標準而不是發明自己的標準,那將會變得更加容易。 – Trabumpaline 2012-01-08 17:24:22

0

由於他們都是內部連接,你可以重新寫在一個更簡單的格式的查詢,而無需使用查詢設計器看起來像這樣:

SELECT S.*, T.[Session Type], P.Forename, P.Surname 
FROM Sessions As S, Session_Type As T, Staff As F, Person As P 
WHERE T.Session_Type_ID = S.SessionTypeFK 
AND F.Staff_ID = S.StaffFK 
AND P.PersonID = F.FK_PersonID 

只要你不與外連接工作那麼你可以在WHERE子句中鏈接你的表,所以很容易回讀。您也可能會注意到我已經使用Aliases作爲表名,這也有助於使SQL更容易遵循,並且如果您正在編寫大型SQL或具有長表名,則可以顯着縮小代碼。

+0

我不確定隱式連接是否是一個好主意,請考慮「......具有交叉連接的不必要的可能性:您可以在沒有相應WHERE子句的情況下將表添加到FROM部分,這被認爲是有害的。 - http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins – Fionnuala 2012-01-08 13:15:01

+0

@Remou公平點,雖然用這種方式編寫SQL將有希望鼓勵人們成爲SQL能幹的人(除了查詢設計者因爲在某些情況下可能效率不高),並瞭解不使用的做法。 – 2012-01-08 15:52:28