普通的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访问sql设计器的输出)
我在连接操作时遇到语法错误。但是MS Access没有指出哪个加入。
答案 0 :(得分:2)
略有不同,但我认为问题中的查询不会对其他数据库起作用 - 对子查询中的表名称的引用没有匹配的表名称。
试试这个,而不是:
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;
由于不同的列具有相同的名称,这可能仍然会返回错误 - 如果是这样,您应该仅使用每个表中所需的列替换上面的.*
,并使用适当的列别名。
答案 1 :(得分:2)
添加括号可以解决问题
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);
答案 2 :(得分:1)
普通的SQL查询是否与MS Access 2007查询不同?
通过“普通SQL”,您可能意味着入门级SQL-92标准SQL(无论您是否知道!)
作为一个整体,Access(ACE,Jet,等等)不符合SQL-92。
具体来说,Access的JOIN
语法不符合SQL-92。
在SQL-92中,一个或多个JOIN
子句可以括在括号内以显示优先级;如果没有使用括号,则所有JOIN
子句都具有相同的优先级。
在Access中,每个JOIN
子句必须在括号内单独包含,但所有JOIN
子句都具有相同的优先级。
换句话说,标准语法上的Access扼流圈及其自己的语法表达不如标准语言:(