ms-access 中的左连接和内连接

Posted

技术标签:

【中文标题】ms-access 中的左连接和内连接【英文标题】:Left join together with inner join in ms-access 【发布时间】:2011-08-09 04:14:30 【问题描述】:

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

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

谢谢

【问题讨论】:

【参考方案1】:

Student.GradeID 可能为空,因为您在 Student 上执行了 LEFT JOIN,它对于您的第二次加入可能不存在。

因此,基本上,无论何时执行 LEFT JOIN,都不能在以后的 JOINS 中使用这些 TABLES 列中的任何一个

【讨论】:

【参考方案2】:

我在 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;

【讨论】:

能否避免左连接中的子查询? 也许School LEFT JOIN (Student INNER JOIN) 会这样做。当心 Access 对 FROM 子句中的括号有要求。如果您不熟悉详细信息,建议您使用查询设计器来设置您的联接。【参考方案3】:

from 和 join 语法错误。

SELECT School.Name, Student.Name, Grade.Grade
FROM Grade
 left join Student on ...
 left join School on  ...

其中“...”是“ = ”。

【讨论】:

我不知道每个表的列名,但它类似于:left join Student.ID = Grade.StudentID left join School.ID = Student.SchoolID

以上是关于ms-access 中的左连接和内连接的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的左连接与右连接,内连接有啥区别

sql中的左连接和右连接

Linq 和 SQL的左连接右连接内链接

左、右、外连接和内连接有啥区别? [复制]

SQL中的左连接与右连接,内连接有什么不同

左连接和内连接组