access 2013 左加入查询

left Join query in access 2013

我是 Microsoft Access 新手。如果我的问题看起来微不足道,请接受我的道歉。

我正在尝试在 Access 中编写一个查询,以显示每月注册课程的学生总数。我有两个 table,名为 courseconfirmed_enrollments

course table 只有一个字段名为 course_nameconfirmed_enrolments table 有三个字段; student_codecourse_namemonth_of_enrol

我想在查询中显示全部course_name(无论学生是否注册)及其总数特定月份的入学人数。我写的查询只显示有注册的课程,不考虑没有注册的课程。

正在寻求您的帮助。这是我的 SQL 代码:

SELECT Course.Course_name, 
        Count(confirmed_enrolments.Student_code) AS CountOfStudent_code,
        confirmed_enrolments.Month_of_enrol
    FROM Course 
         LEFT JOIN confirmed_enrolments 
             ON Course.Course_name = confirmed_enrolments.Course_name
    GROUP BY Course.Course_name, confirmed_enrolments.Month_of_enrol
    HAVING confirmed_enrolments.Month_of_enrol="December 2016";

我想你是故意的:

SELECT c.Course_name, Count(ce.Student_code) AS CountOfStudent_code, 
       ce.Month_of_enrol
FROM Course as c LEFT JOIN
     (SELECT ce.*
      FROM confirmed_enrolments as ce
      WHERE ce.Month_of_enrol = "December 2016"
     ) as ce
     ON c.Course_name = ce.Course_name
GROUP BY c.Course_name, ce.Month_of_enrol;

在您的查询中使用 HAVING 子句很聪明,但您是按第二个 table 筛选的 - 值是 NULL 而不是指定的月份 - - 当没有匹配时。

问题是条件在 table。在正常的 SQL 方言中,你会写:

SELECT c.Course_name, Count(ce.Student_code) AS CountOfStudent_code, 
       ce.Month_of_enrol
FROM Course as c LEFT JOIN
     confirmed_enrolments as ce
     ON c.Course_name = ce.Course_name AND
        ce.Month_of_enrol = "December 2016"
GROUP BY c.Course_name, ce.Month_of_enrol;

但是 MS Access 似乎不允许在 LEFT JOIN 中进行第二次比较。

顺便说一句,另一种编写查询的方法是使用相关子查询:

SELECT c.Course_name,
       (SELECDT Count(ce.*) 
        FROM confirmed_enrolments as ce
        WHERE ce.Month_of_enrol = "December 2016"
       ) AS CountOfStudent_code, 
       "December 2016" as ce.Month_of_enrol
FROM Course as c ;