0

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

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

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

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

我怎样才能在 MS ACCESS 中轻松做到这一点?结果查询应该是:

James|高级 Flash
詹姆斯|高级编辑
Adrian|基本编辑
Adrian|基本 Flash
Adrian|高级 Flash
Adrian|高级编辑

(詹姆斯上过所有“基础”课程,而阿德里安没有上过“基础”和“高级”课程)

4

1 回答 1

1

这个想法是创建学生和课程的所有组合。然后做一个left jointo Registrations。任何匹配的课程都是不参加的课程。

访问语法与其他数据库有点不同。我认为以下是此类查询的 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 理解连接。无论如何,以下应该有效。子查询获取学生和课程的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;
于 2013-07-16T18:09:07.253 回答