我尝试了很多方法,我怀疑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 |高级编辑
(詹姆斯已经参加了所有“基础”课程,而阿德里安没有参加'基础'和'高级'课程)
答案 0 :(得分:1)
这个想法是创建学生和课程的所有组合。然后执行left join
到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正确排序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;