[英]Trouble with MS Access 2007 SQL Query
普通的SQL查詢與MS Access 2007查詢是否不同?
我有這個簡單的查詢,但是在MS Access查詢(SQL視圖)中不起作用。 這有什么問題?
SELECT StudentSubject.*, Subject.*,Professor.*, Student.*, Church.*
FROM
(
SELECT StudentSubject.*, Subject.*,Professor.* , Student.*
FROM
(
SELECT StudentSubject.*, Subject.*,Professor.*
FROM
StudentSubject
LEFT JOIN Subject ON StudentSubject.SubjectID=Subject.SubjectID
INNER JOIN Professor ON Subject.ProfessorID=Professor.ProfessorID
)
INNER JOIN Student ON StudentSubject.StudentID=Student.StudentID
)
LEFT JOIN Church ON Student.ChurchID=Church.ChurchID;
我相信如果我使用MySQL / MSSQL,這會起作用(如果我使用別名並直接執行-這是ms access sql設計器的輸出)
我在加入操作時收到語法錯誤。 但是MS Access並未指出哪個連接。
稍有不同,但是我也不認為問題中的查詢也可以在其他DB上使用-子查詢中有對表名的引用,而這些子查詢沒有以匹配的表名作為別名。
試試這個,代替:
SELECT StudentSubject.*, Subject.*,Professor.*, Student.*, Church.*
FROM StudentSubject
LEFT JOIN Subject ON StudentSubject.SubjectID=Subject.SubjectID
INNER JOIN Professor ON Subject.ProfessorID=Professor.ProfessorID
INNER JOIN Student ON StudentSubject.StudentID=Student.StudentID
LEFT JOIN Church ON Student.ChurchID=Church.ChurchID;
由於不同的列具有相同的名稱,這仍可能會返回錯誤-如果是這樣,則應僅將每個表中的所需列替換為.*
,並使用適當的列別名。
添加括號就可以了
SELECT Subject.SubjectName,Professor.ProfessorName,Church.ChurchName,Student.StudentName
FROM ((((StudentSubject LEFT JOIN Subject
ON StudentSubject.SubjectID=Subject.SubjectID)
INNER JOIN Professor ON Subject.ProfessorID=Professor.ProfessorID)
INNER JOIN Student ON StudentSubject.StudentID=Student.StudentID)
LEFT JOIN Church ON Student.ChurchID=Church.ChurchID);
普通的SQL查詢與MS Access 2007查詢是否不同?
所謂“普通SQL”,可能是指入門級SQL-92標准SQL(無論您是否知道!)。
總體而言,Access(ACE,Jet等)不符合SQL-92。
具體來說,Access的JOIN
語法與SQL-92不兼容。
在SQL-92中,可以將一個或多個JOIN
子句括在括號內以顯示優先級。 如果不使用括號,則所有JOIN
子句的優先級都相同。
在Access中,每個JOIN
子句必須單獨用括號括起來,但是所有JOIN
子句的優先級都相同。
換句話說,對Standard語法及其自身語法的訪問限制比標准的:(
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.