access 2013 左加入查询
left Join query in access 2013
我是 Microsoft Access 新手。如果我的问题看起来微不足道,请接受我的道歉。
我正在尝试在 Access 中编写一个查询,以显示每月注册课程的学生总数。我有两个 table,名为 course
和 confirmed_enrollments
。
course
table 只有一个字段名为 course_name
而 confirmed_enrolments
table 有三个字段; student_code
、course_name
和 month_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 ;
我是 Microsoft Access 新手。如果我的问题看起来微不足道,请接受我的道歉。
我正在尝试在 Access 中编写一个查询,以显示每月注册课程的学生总数。我有两个 table,名为 course
和 confirmed_enrollments
。
course
table 只有一个字段名为 course_name
而 confirmed_enrolments
table 有三个字段; student_code
、course_name
和 month_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 ;