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 中的左连接和内连接的主要内容,如果未能解决你的问题,请参考以下文章