繁体   English   中英

MS Access 2007 SQL查询出现问题

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM