如何编写查询以查找不属于所选字段的记录?

时间:2012-12-01 03:01:56

标签: php mysql sql mysqli

我有两个数据库表:

Course_Module表:

CourseId  ModuleId
1         1
1         2
1         3

模块表:

ModuleId ModuleNo   ModuleName                            Credits
1        CHI2513    Systems Strategy                      20
2        CHI2550    Modern Database Applications          20
3        CHI2565    Ecommerce - Business and Technology   20
4        CHT2220    Interactive Systems                   20
5        CHT2520    Advanced Web Programming              20
6        CHI2554    Patent Law                            40

现在我不知道如何做到这一点,但我想要做的是创建查询,它将输出一组记录,显示一个不在所选课程中的模块列表。

例如,如果是CourseId = 1,那么它应该从查询中输出的模块如下:

4        CHT2220    Interactive Systems                   20
5        CHT2520    Advanced Web Programming              20
6        CHI2554    Patent Law                            40

这是因为您可以在Course_Module表中看到,这些模块不属于选择的CourseId 1

但是如何编写这样的查询呢?以下是我创建的一个简单查询:

SELECT cm.CourseId, m.ModuleId, m.ModuleNo, m.ModuleName, m.Credits
FROM Course_Module cm
INNER JOIN Module m ON cm.ModuleId = m.ModuleId
WHERE
(CourseId = 1)
ORDER BY ModuleNo 

2 个答案:

答案 0 :(得分:2)

以下情况如何?

SELECT
    m.*
FROM
    Module m
WHERE
    m.ModuleId NOT IN (
                       SELECT cm.ModuleId
                           FROM Course_Module cm
                       WHERE cm.CourseId = 1
                      );

答案 1 :(得分:0)

我认为这可行:

SELECT
   Module.*
FROM
   Module
WHERE
   ModuleId NOT IN ( SELECT ModuleId FROM CourseId WHERE CourseId = 1)