您好我有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)
答案 0 :(得分:1)
你关闭了,你最后忘记了一张支票!
编辑此部分:
NOT IN (SELECT ModuleCode FROM StudentsModules where StudentNo=48377767)
答案 1 :(得分:0)
一种可能的方法来选择学生尚未注册的所有模块,假设在此示例中学生为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
)