[英]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.