我必须在访问数据库中运行以下查询:
SELECT School.Name, Student.Name, Grade.Grade
FROM( (`School` `School` LEFT JOIN `Student` `Student` ON `School`.`ID`=`Student`.`SchoolID`) INNER JOIN `Grade` `Grade` ON `Student`.`GradeID` = `Grade`.`ID`)
这给了我错误“不支持连接表达式”,但是如果我将LEFT JOIN更改为INNER JOIN,它会正确运行。我认为在ms-access上同时使用这两个连接的方式可能有不同的方式。任何人都可以告诉我这个查询有什么问题和/或不支持这个问题的原因。
由于
答案 0 :(得分:7)
我在Access的查询设计器中重新创建了您的查询。正如您所发现的那样,查询使用两个连接作为INNER。但是,当我尝试将第一个INNER JOIN切换为LEFT JOIN时,查询设计者抱怨“模糊的外连接”。两个连接的LEFT都有效,INNER也是如此。
如果第一次连接需要LEFT而第二次连接需要INNER,则可以将表从第二次连接移动到子查询中。
SELECT
School.[Name] AS school_name,
sub.[Name] AS student_name,
sub.Grade
FROM
School LEFT JOIN (
SELECT
Student.SchoolID,
Student.[Name],
Grade.Grade
FROM
Student INNER JOIN Grade
ON Student.GradeID = Grade.ID) AS sub
ON School.ID = sub.SchoolID;
答案 1 :(得分:2)
Student
。GradeID
可能为null,因为您对学生进行了LEFT JOIN,您的第二次加入可能不存在。
所以基本上,无论何时进行LEFT JOIN,都不能在以后的JOINS中使用任何TABLES列
答案 2 :(得分:0)
from和join语法错误。
SELECT School.Name, Student.Name, Grade.Grade
FROM Grade
left join Student on ...
left join School on ...
哪里" ......"是"<主键> =<外键>"。