我有两个表:chosenunit
和 units
。在 chosenunit
表中有 2 列 student_id
和 unit_id
。单位表有 unit_id
和 unit_name
列,其中包含系统中的所有单位。假设有 2 个学生,id 分别为 1000 和 1001。他们在几个单位注册。 chosenunit 表将如下所示:
(1000,2000),
(1000,2001),
(1000,2006),
(1001,2000),
(1001,2004),
我需要获取一个学生没有注册的所有单元,如果1000个登录系统,需要显示除2000,2001,2006以外的所有科目的单元名称。
最佳答案
这个问题有很多可能的解决方案。
首先是使用LEFT JOIN
和IS NULL
。
SELECT a.*
FROM units a
LEFT JOIN choseunits b
ON a.unit_ID = b.unit_ID AND
b.student_ID = 1000
WHERE b.unit_ID IS NULL
要进一步了解有关联接的更多信息,请访问以下链接:
第二个是使用NOT EXISTS
SELECT a.*
FROM unit a
WHERE NOT EXISTS
(
SELECT 1
FROM choseunit b
WHERE a.unit_ID = b.unit_ID AND
b.student_ID = 1000
)
关于mysql查询获取学生未注册的所有单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16633333/