Select 条与另一条记录无关的记录

Select records that are not associated with the other record

嗨,我有 3 tables ModulesStudents 并加入 table(多对多)StudentModules。我想 select 学生未注册的所有模块 for.When 学生注册信息存储在 StudentModules table.Basically 我要 select 所有未关联的模块学号在StudentModulestable从Modulestable。

我试过下面的代码

SELECT Modules.*, Students.*
FROM            ((StudentsModules INNER JOIN
                     Modules ON StudentsModules.ModuleCode = Modules.ModuleCode) INNER JOIN
                     Students ON StudentsModules.StudentNo = Students.StudentNo)
                     Where StudentNo = 48377767 AND WHERE ModuleCode NOT IN (SELECT ModuleCode FROM StudentsModules)

你很接近,你最后忘记了一张支票!

编辑这部分:

NOT IN (SELECT ModuleCode FROM StudentsModules where StudentNo=48377767)

select 学生未注册的所有模块的一种可能方法,假设本例中学生编号为 48377767

SELECT m.*
FROM Modules m
     LEFT JOIN StudentsModules sm ON sm.ModuleCode = m.ModuleCode 
                                     AND sm.StudentNo = 48377767
WHERE sm.ModuleCode IS NULL

[SQL Fiddle]

更新:

没有JOIN的不同方法:

SELECT m.*
FROM Modules m
WHERE m.ModuleCode NOT IN
                   (
                      SELECT ModuleCode
                      FROM StudentsModules
                      WHERE StudentNo = 48377767
                    )