【问题标题】:Left join together with inner join in ms-accessms-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 上同时使用这两个连接的方式可以有不同的方式。谁能告诉我这个查询有什么问题和/或不支持的原因。

谢谢

【问题讨论】:

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


    【解决方案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
      猜你喜欢
      • 2012-08-29
      • 2016-11-25
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多