MS Access SQL,显示以前学生未学过的课程

时间:2013-07-16 17:32:24

标签: sql ms-access

我尝试了很多方法,我怀疑NOT EXIST可能有所帮助,但我不确定如何实现SQL语句。有人帮帮我吗?

我在MS Access数据库中有三个表。

Students (Student Name, Email)
Courses (Course Name, Fees)
Registration (Course Name, Student Name)

我现在想创建一个Query,它可以显示每个学生之前没有学过的所有课程。这将允许我的注册经理追求他们进行更多的课程注册。

如何在MS ACCESS中轻松完成此操作?生成的查询应为:

詹姆斯|高级闪光灯
詹姆斯|高级编辑
阿德里安|基本编辑
阿德里安|基本闪光灯 Adrian | Advanced Flash
Adrian |高级编辑

(詹姆斯已经参加了所有“基础”课程,而阿德里安没有参加'基础'和'高级'课程)

1 个答案:

答案 0 :(得分:1)

这个想法是创建学生和课程的所有组合。然后执行left joinRegistrations匹配的任何内容都是未采取的课程。

访问语法与其他数据库略有不同。我认为以下是此类查询的Access语法:

select s.studentName, c.CourseName
from ((select studentName
       from students
      ) s,
      (select CourseName
       from courses
      ) c
     ) left join
     Registration r
     on r.StudentName = s.StudentName and
        r.CourseName = s.CourseName
where r.StudentName is NULL;

编辑:

我认为可能必须为Access正确排序parens才能理解连接。无论如何,以下应该有效。 driver子查询获取学生和课程的所有组合,然后用于left join

select driver.StudentName, driver.CourseName
from (select distinct StudentName, CourseName
      from students, courses
     ) driver left join
     Registration r
     on r.StudentName = driver.StudentName and
        r.CourseName = driver.CourseName
where r.StudentName is NULL;