嗨,我有3个表Modules
,Students
和连接表(多对多)StudentModules
。我想选择学生没有注册的所有模块。当学生注册时,信息存储在StudentModules
表中。基本上,我想从StudentModules
表中选择所有与Modules
表中的学生号无关的模块。
我试过下面的代码
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)
最佳答案
在本例中,假设学生编号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
)