选择与其他记录无关的记录

时间:2015-03-28 01:08:51

标签: mysql sql vb.net ado.net oledb

您好我有3个表ModulesStudents和联接表(多对多)StudentModules。我想选择学生尚未注册的所有模块。当学生时注册信息存储在StudentModules表中。基本上我想从StudentModules表中选择Modules表中与学生编号无关的所有模块。 enter image description here

我试过以下代码

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)

2 个答案:

答案 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
                    )