在ms-access中与内连接一起左连接

时间:2011-04-20 03:47:28

标签: ms-access left-join inner-join

我必须在访问数据库中运行以下查询:

    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上同时使用这两个连接的方式可能有不同的方式。任何人都可以告诉我这个查询有什么问题和/或不支持这个问题的原因。

由于

3 个答案:

答案 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)

StudentGradeID可能为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  ...

哪里" ......"是"<主键> =<外键>"。